poj 2478 http://poj.org/problem?id=2478
欧拉函数基础题,记得会超long long 就好了
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #include <stack> using namespace std; const int maxn=1000000+20; typedef long long ll; int n; ll phi[maxn]; void init() { for(int i=1;i<=maxn-10;i++) phi[i]=i; for(int i=2;i<=maxn-10;i+=2) phi[i]/=2; for(int i=3;i<=maxn-10;i+=2) { if(phi[i]==i) { for(int j=i;j<=maxn-10;j+=i) phi[j]=(phi[j]/i)*(i-1); } } for(int i=3;i<=maxn-10;++i) phi[i]+=phi[i-1]; } int main() { //freopen("in.txt","r",stdin); init(); while(~scanf("%d",&n)&&n) { printf("%lld\n",phi[n]); } return 0; }
时间: 2024-10-12 02:24:58