欧拉函数。。。。。
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; const int maxn=50000+10; int pp[maxn]; int sum[maxn]; int n; void ola() { memset(pp,0,sizeof(pp)); memset(sum,0,sizeof(sum)); pp[1]=1; for(int i=2;i<=maxn;i++) if(!pp[i]) { for(int j=i;j<=maxn;j+=i) { if(!pp[j]) pp[j]=j; pp[j]=pp[j]/i*(i-1); } } for(int i=1;i<=maxn;i++) sum[i]=pp[i]+sum[i-1]; } int main() { ola(); while(~scanf("%d",&n)&&n!=0) { printf("%d\n",sum[n]*2-1); } return 0; }
时间: 2024-10-22 14:40:11