http://acm.nyist.net/JudgeOnline/problem.php?pid=570
欧拉函数求和
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
题目描述很简单,求出
(PS:上面式子的意思是大于0小于n并且能整除n的所有d的欧拉函数值之和)。
-
输入
- 每行一个数n(n<2^31),输入以文件结尾结束。 输出
- 每个结果占一行。 样例输入
-
1 2 12
样例输出
-
0 1 8
#include<stdio.h>
int Euler(int n)
{
int ret=n,i;
for(i=2;i*i<=n;i++)
{
if(n%i==0)
{
ret=ret-ret/i;
while(n%i==0)
n/=i;
}
}
if(n>1) ret=ret-ret/n;
return ret;
}
int main()
{
int N,i,sum;
while(scanf("%d",&N)!=EOF)
{
for(i=1,sum=0;i<=N/2;i++)
if(N%i==0)
sum+=Euler(i);
printf("%d\n",sum);
}
return 0;
}