题目可以转成求2--n每个数的欧拉函数值之和。
可以利用欧拉函数打表的方法直接求出2--n每个数的欧拉函数值
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int phi[1000000+10];
void phi_table() //打表求出1000000以内每个数的欧拉函数值
{
int i,j,k;
memset(phi,0,sizeof(phi));
for(i=2;i<=1000000;i++)
if(!phi[i])
{
for(j=i;j<=1000000;j+=i)
{
if(!phi[j]) phi[j]=j;
phi[j]=phi[j]/i*(i-1);
}
}
}
int main()
{
long long sum;
int n,i,j;
phi_table();
while(scanf("%d",&n)&&n)
{
sum=0;
for(i=2;i<=n;i++) //求从2--n的所有数欧拉函数值的和
sum+=phi[i];
printf("%d\n",sum);
}
return 0;
}