POJ

来源:互联网 发布:豆瓣电影推荐算法 编辑:程序博客网 时间:2024/05/22 02:30
#include<cstdio>using namespace std;/*欧拉函数n>=2  a/b(a<=a<b<=n&&gcd(a,b)==1)F2 = {1/2}F3 = {1/3, 1/2, 2/3}F4 = {1/4, 1/3, 1/2, 2/3, 3/4}F5 = {1/5, 1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5}求Fn集合中元素个数*/typedef long long LL;const int maxn=1e6+5;int n;int phi[maxn];LL sum[maxn];void phi_table(int n){    for(int i=0;i<=n;i++) phi[i]=0;    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);            }        }    }}void init(){    sum[1]=0;    for(int i=2;i<=maxn;i++)    {        sum[i]=sum[i-1]+phi[i];    }}int main(){    phi_table(maxn);    init();    while(~scanf("%d",&n))    {       if(n==0) break;       printf("%lld\n",sum[n]);    }    return 0;}