您的位置:首页 > 其它

HDU 1405

2016-08-07 20:36 253 查看
题意:

  输入一个数n,输出它的素因子与这个素因子出现的次数.

分析:

  用欧拉函数,变下形就好了,不再过多解释.

代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <fstream>
#include <ctime>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <set>
#include <map>
#include <list>
#include <stack>
#include <queue>
#include <iterator>
#include <vector>

using namespace std;

#define LL long long
#define INF 0x3f3f3f3f
#define MOD 1000000007
#define MAXN 10000010
#define MAXM 1000010

const int maxn = 65537;
int a[maxn];

void euler_phi(int n)
{
int m = (int)sqrt(n+0.5);
//int ans = n;
for(int i = 2; i <= m; i++ )
if(n%i==0)
{
//ans = ans/i*(i-1);
while(n%i==0)
{
a[i]++;
n /= i;
}
}
if(n > 1)
a
++;
//        ans = ans/n*(n-1);
//    return ans;
}

int main()
{
int n;
int kase = 0;
while(scanf("%d", &n)==1&&n>=0)
{
if(kase)
printf("\n");
memset(a, 0, sizeof(a));
euler_phi(n);
printf("Case %d.\n", ++kase);
for(int i = 2; i <= n; i++ )
if(a[i])
printf("%d %d ", i, a[i]);
printf("\n");
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: