求[1,n]中与n互质的数
模板如下
int Euler(int n)
{
int ret=n,i;
for(i=2;i*i<=n;i++) //如果i*i可能会超出int,那么就用sqrt(n)
if(n%i==0)
{
ret=ret/i*(i-1);//先除以i,防止超出int,造成错误
while(n%i==0)
n/=i;
}
if(n>1)
ret=ret/n*(n-1);
return ret;
}