#include<bits/stdc++.h>
using namespace std;
const int MAXN=3000000;
bool b[MAXN];
int p[MAXN],phi[MAXN];
void get_phi(){
phi[1]=1;
int i,j,cnt=0;
for(i=2;i<MAXN;i++){
if(b[i]==0){
p[++cnt]=i;
phi[i]=i-1;
}
for(j=1;j<=cnt&&i*p[j]<MAXN;j++){
b[i*p[j]]=1;
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 main(){
int i,x,y;
long long ans;
get_phi();
while(scanf("%d%d",&x,&y)!=EOF){
ans=0;
for(i=x;i<=y;i++)
ans+=phi[i];
printf("%lld\n",ans);
}
return 0;
}
HDU 2824 The Euler function
最新推荐文章于 2020-01-16 15:32:44 发布