注意求欧拉函数之和是每个因子的欧拉函数之和不是质因子。而欧拉函数的值是它本身与它的因子件事互质的关系,这样的因子有多少个。点击打开链接
#include<stdio.h>
#include<string.h>
#include<math.h>
int eular(int n)
{
int ret=1,i;
for(i=2;i*i<=n;i++)
if(n%i==0)
{
n/=i,ret*=i-1;
while(n%i==0)
n/=i,ret*=i;
}
if(n>1)
ret*=n-1;
return ret;
}
int main()
{
int n,i;
while(~scanf("%d",&n))
{
int s=1;
if(n==1)
{
printf("0\n");
continue;
}
for(i=2;i*i<=n;i++)
{
if(n%i==0)
{
s+=eular(i);
if(n/i!=i)
s+=eular(n/i);
}
}
printf("%d\n",s);
}
return 0;
}
#include<stdio.h>
#include<string.h>
int eular(int n)
{
int ret=1,i;
for(i=2;i*i<=n;i++)
if(n%i==0)
{
n/=i,ret*=i-1;
while(n%i==0)
n/=i,ret*=i;
}
if(n>1)
ret*=n-1;
return ret;
}
int main()
{
int t;
while(~scanf("%d",&t))
{
int i;
long long sum=0;
for(i=1;i*i<=t;i++)
{
if(t%i==0)
{
if(t/i==i)
sum+=eular(i)*i;
else
{
sum+=eular(t/i)*i;
sum+=eular(i)*(t/i);
}
}
}
printf("%lld\n",sum);
}
return 0;
}