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