欧拉函数 是求 与 n 互质的数的个数
记住 前几项 分别为 1 2 2 4 3 6 4 6 4 10 4 12
公式为
memset(phi,0,sizeof(phi)); phi[1]=1;
for(int i=2; i<=N; i++) if(!phi[i]) //质因子
for(int j=i; j<=N; j+=i)
{
if(!phi[j]) phi[j]=j;
phi[j]=phi[j]/i*(i-1);
}
#include <cstdio>
#include <cstring>
#include <cmath>
#define N 50000
int phi[N+10];
int sum[N+10];
void init() //先用筛法算出50000以内每个数字的欧拉函数值
{
memset(phi,0,sizeof(phi)); phi[1]=1;
for(int i=2; i<=N; i++) if(!phi[i]) //质因子
for(int j=i; j<=N; j+=i)
{
if(!phi[j]) phi[j]=j;
phi[j]=phi[j]/i*(i-1);
}
sum[1]=1;
for(int i=2; i<=N; i++)
sum[i]=sum[i-1]+phi[i];
return ;
}
int main()
{
int n;
init();
while(scanf("%d",&n)!=EOF && n)
printf("%d\n",sum[n]*2-1);
return 0;
}