找出2-n的所有欧拉函数值相加就能得到答案
不过多亏了这道题没卡时
题目代码
#include<iostream> #include<stdio.h> #include<string.h> #include<vector> using namespace std; typedef long long LL; const int maxn=1000007; int phi[maxn],prime[maxn]; bool check[maxn]; int cnt=0; void euler(){ phi[1]=1; for(int i=2;i<maxn;i++){ if(!check[i]){ prime[cnt++]=i; phi[i]=i-1; } for(int j=0;j<cnt&&i*prime[j]<maxn;j++){ check[i*prime[j]]=true; if(i%prime[j]) phi[i*prime[j]]=phi[i]*(prime[j]-1); else{ phi[i*prime[j]]=phi[i]*prime[j]; break; } } } } int main(){ int n; euler(); while(scanf("%d",&n)){ if(n==0)break; LL sum=0; for(int i=2;i<=n;i++) sum+=phi[i]; printf("%lld ",sum); } return 0; }