The Euler function
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
链接:2824
代码:
#include<iostream>
using namespace std;
bool flag[3000005];
int phi[3000005]={0,1},p[3000005]={0},cnt=0;
int main()
{
for(int i=0;i<=3000004;i++)flag[i]=1;
for(int i=2;i<3000000;i++)
{
if(flag[i])
{
p[cnt++]=i;
phi[i]=i-1;
}
for(int j=0;j<cnt;j++)
{
if(i*p[j]>3000000)break;
flag[i*p[j]]=0;
if(i%p[j]==0)
{
phi[i*p[j]]=p[j]*phi[i];
break;
}
else phi[i*p[j]]=(p[j]-1)*phi[i];
}
}
int i,x,y;
while(cin>>x>>y)
{
long long ans=0;
for(i=x;i<=y;i++)ans+=phi[i];
cout<<ans<<endl;
}
return 0;
}