#include<cstdio>
const int m=1e6;
int l,a[m+1];
bool b[m+1];
long long s[m+1];
void zs(){
long long i,j;
b[1]=0;
for(i=2;i<=m;i++)
if(b[i]==0){
a[++l]=i;
for(j=i*i;j<=m;j+=i)
b[j]=1;
}
}
int euler(int n){
int i,sum=n;
if(b[n]==0)return n-1;
for(i=1;b[n]!=0;i++){
if(n%a[i]==0)sum=sum/a[i]*(a[i]-1);
while(n%a[i]==0)n/=a[i];
}
if(n>1)sum=sum/n*(n-1);
return sum;
}
int main(){
int n,i;
zs();
for(i=1;i<=1e6;i++)
s[i]=s[i-1]+euler(i);
while(scanf("%d",&n)&&n)
printf("%lld\n",s[n]);
return 0;
}
POJ 2478 Farey Sequence
最新推荐文章于 2018-07-22 18:05:33 发布