很明显的欧拉函数
#include"stdio.h"
#include"string.h"
#define N 1000001
int phi[N];
int isPrime[N];
int A[N];
void prime()//线型的求欧拉函数
{
int i,j,k;
k=0;
memset(isPrime,0,sizeof(isPrime));
isPrime[0]=isPrime[1]=1;
for(i=2;i<N;i++)
{
if(isPrime[i]==0)
{
A[k++]=i;
phi[i]=i-1;
}
for(j=0;j<k&&i*A[j]<N;j++)
{
isPrime[i*A[j]]=1;
if(i%A[j]==0)
phi[i*A[j]]=phi[i]*A[j];
else
phi[i*A[j]]=phi[i]*(A[j]-1);
}
}
}
int main()
{
int n;
int i;
__int64 ans;
prime();
while(scanf("%d",&n)!=-1&&n)
{
ans=0;
for(i=2;i<=n;i++)
ans+=phi[i];
printf("%I64d\n",ans);
}
return 0;
}