分析:
此题只是换了一种形式提出问题的,实际可以把分数看成一对互质的数。那么要我们求得是:前n个数每个数的欧拉函数值的总数。
欧拉函数是:数(n)与前n-1个数互质的个数。
这题就是个模板题,没什么可解释的。
代码:
#include<stdio.h>
#define M 1001000
typedef long long LL;
int vis[M]={0};
int prime[M/3],phi[M];
LL sum[M];
void PHI() //即可以求出素数,还可以求出欧拉函数的值! 模板。
{
int cnt=0;
for(int i=2;i<M;i++){
if(vis[i]==0){
prime[cnt++]=i;
phi[i]=i-1; //i如果是素数,那么前面i-1个都与它互质。
}
for(int j=0;j<cnt&&prime[j]*i<M;j++){
vis[i*prime[j]]=1;
if(i%prime[j]==0){
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
else phi[i*prime[j]]=phi[i]*phi[prime[j]];
}
}
}
int main()
{
int n;
PHI();
sum[2]=phi[2];
for(int i=3;i<=1000000;i++)
sum[i]=sum[i-1]+phi[i];
while(scanf("%d",&n)&&n){
printf("%lld\n",sum[n]);
}
return 0;
}