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