poj2407小于n的相对素数

来源:互联网 发布:c语言寄存器 编辑:程序博客网 时间:2024/04/29 21:05
# include <iostream># include <cstdio># include <string.h>using namespace std;typedef long long ll;bool u[50000];ll su[50000],num;ll gcd (ll a,ll b){    return b?gcd(b,a%b):a;}void prepare(){    ll i,j;    memset(u,true,sizeof(u));    for(i=2;i<=50000;i++)    {        if(u[i])            su[++num]=i;        for(j=1;j<=num;j++)        {            if(i*su[j]>50000)                break;            u[i*su[j]]=false;            if(i%su[j]==0)                break;        }    }}ll phi(ll x){    ll ans=1;    int i,j,k;    for(i=1;i<=num;i++)        if(x%su[i]==0)    {        j=0;        while(x%su[i]==0)        {            ++j;            x/=su[i];        }        for(k=1;k<j;k++)            ans=ans*su[i]%100000000711;        ans=ans*(su[i]-1)%100000000711;        if(x==1) break;    }    if(x>1)        ans=ans*(x-1)%100000000711;    return ans;}int main(){    prepare();    int n;    ll ans=1;    while(scanf("%d",&n)==1&&n>0)    {        ans=phi(n);        printf("%d\n",(int )ans);    }    return 0;}

0 0
原创粉丝点击