#include<iostream>
#include<cstring>
using namespace std;
long long F[1000010]={1};
bool isprime[1020];
int prime[1000];
int main(){
int k=0;
memset(isprime,1,sizeof(isprime));
memset(prime,0,sizeof(prime));
for(int i=2;i<=1010;++i){
if(isprime[i]){
prime[k]=i;
++k;
}
for(int j=i*i;j<=1010;j+=i){
isprime[j]=0;
}
}
for(int i=2;i<=1000000;++i){
int tmp=i,j=0,k=0;
long long add=i;
while(tmp!=1){
if(prime[j]==0){
add=add/tmp*(tmp-1);
break;
}
if(tmp%prime[j]==0){
tmp/=prime[j];
++k;
if(k==1) add=add/prime[j]*(prime[j]-1);
}
else{
k=0;
++j;
}
}
F[i]=F[i-1]+add;
}
while(cin>>k){
if(k==0) break;
cout<<F[k]<<endl;
}
return 0;
}
sicily 1089. Farey Sequence
最新推荐文章于 2015-03-18 23:18:28 发布