欧拉函数:求小于n且与n互质(最大公约数为1)的数的个数
#include<stdio.h>
int Euler(int x)
{
int i,sum=x;
for(i=2;i*i<=x;i++)
{
if(x%i==0)
{
sum-=sum/i; //不是很明白,为什么不是sum-=x/i ——参考因数分解
while(x%i==0) x/=i;
}
}
if(x>1) sum-=sum/x;
return sum;
}
main()
{
int N;
while(scanf("%d",&N),N)
printf("%d\n",Euler(N));
}