欧拉函数求和
时间限制: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; }
本文介绍了一种计算特定范围内所有能整除给定数n的数的欧拉函数值之和的算法,并提供了完整的C语言实现代码。该算法通过遍历所有可能的因数并计算其欧拉函数值来解决问题。
248

被折叠的 条评论
为什么被折叠?



