欧拉函数的通式 (x不为0)其中p1,p2,p3-----pn都是x的质因子。
若n是质数p的k次幂,
1.求小于n与n互质的个数
int euler(int n)
{
int ret=1,i;
for( i=2;i*i<=n;i++)
{
if(n%i==0)
{
ret*=i-1;
n/=i;
}
while(n%i==0)
ret*=i,n/=i;
}
if(n>1)
ret*=n-1;
return ret;
}
2.欧拉打表
#include<cstdio>
using namespace std;
const int M=3000005;
long long a[M];
void eulers()
{
a[1]=1;
long long i,j;
for(i=2;i<M;i++)
a[i]=i;
for(i=2;i<M;i++)
{
if(a[i]==i)
{
for(j=i;j<M;j+=i)
a[j]=a[j]/i*(i-1);
}
}
for(i=2;i<M;i++)//到i位置,一共多少
a[i]+=a[i-1];
}
int main()
{
int n,m;
eulers();
while(~scanf("%d%d",&n,&m))
{
printf("%lld\n",a[m]-a[n-1]);
}
return 0;
}