poj 2478 欧拉函数

来源:互联网 发布:java培训班包住 编辑:程序博客网 时间:2024/05/17 03:30

欧拉函数基础之基础题

 

#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<cmath>#include<algorithm>#include<iomanip>using namespace std;#define Max 1000005int p[Max];int ph[Max]; //记录《=i的且与i互质的个数void prime() //筛选法求素数{    int i,j;    memset(p,0,sizeof(p));    p[1]=1;    for(i=2;i<Max;i++)    {        if(p[i]==0)        {            for(j=i*2;j<Max;j+=i)                p[j]=1;        }    }}void euler(){    int i,j;    for(i=0;i<Max;i++)    {        ph[i]=i;    }    for(i=2;i<Max;i++)    {        if(p[i]==0)        {            for(j=i;j<Max;j+=i)                ph[j]=ph[j]/i*(i-1);        }    }}int main(){    prime();    euler();    int n;    while(cin>>n)    {        if(n==0)            break;        long long ans=0;        for(int i=2; i<=n; i++)            ans+=(ph[i]);        printf("%lld\n",ans);    }    return 0;}


 

原创粉丝点击