在x以内,有多少个与x互质的数
通式:φ(x) = x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)……(1-1/pn)
p1到pn分别是n个能被x整除的数,并且这n个数都不相同。
也不知道怎么用文字解释这个东西。。。
还是直接记住通式,然后看代码吧
int euler(int n)
{
int sum=n;
int i;
for(i=2;i<=n;i++)
{
if(n%i==0)
{
sum=sum/i*(i-1);
while(n%i==0) //过滤掉所有i的倍数
n/=i;
}
}
if(n>1)
sum=sum/n*(n-1);
return sum;
}
打表法
void Init ()
{
int i, j;
for (i=0; i<N; i++)
oula[i] = i;
for (i=2; i<N; i++)
{
if (oula[i] == i)
{
for (j=i; j<N; j+=i)
oula[j] = oula[j] / i * (i - 1);
}
}
}