poj 2407——Relatives

来源:互联网 发布:js点击播放音频 编辑:程序博客网 时间:2024/06/13 15:51

题意:求欧拉函数

代码如下:

#include<iostream>#include<cstdio>#include<cstring>using namespace std;bool valid[50005];int ans[50005];int tot=0;void getPrime(){    int n=50000;    memset(valid,true,sizeof(valid));    valid[1]=valid[0]=false;    for(int i=2;i<n;++i)    {        if(valid[i])        {            ans[tot++]=i;        }        for(int j=0;((j<tot)&&(i*ans[j]<=n));j++)        {            valid[i*ans[j]]=false;            if(i%ans[j]==0)break;        }    }}int phi(int n){    int rea=n;    for(int i=0;ans[i]*ans[i]<=n;++i)    {        if(n%ans[i]==0)        {            rea=rea-rea/ans[i];            while(n%ans[i]==0)            {                n/=ans[i];            }        }    }    if(n>1)    {        rea=rea-rea/n;    }    return rea;}int main(){ //   freopen("data.txt","r",stdin);    getPrime();    int n;    while(scanf("%d",&n)!=EOF && n)    {        printf("%d\n",phi(n));    }    return 0;}


0 0