欧拉函数

来源:互联网 发布:ios邪恶软件 编辑:程序博客网 时间:2024/06/05 13:25
数论,对正整数n,欧拉函数是小于n的数中与n互质的数的数目。
性质① m是素数时,有φ(m)=m-1
性质② 当m、n互素时,φ(m*n)=φ(m)*φ(n)

性质③ 对一切正整数n,有φ(p^n)=[p^(n-1)]*(p-1)

规定 φ(1)=1

利用性质判定:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long long ll;ll eular(ll x){ll res=x;    for(ll i=2;x!=1;i++)    if(x%i==0){ res=res/i*(i-1);        while(x%i==0) x/=i; }    return res;}int main(){    ll m;    while(~scanf("%I64d",&m))    {        printf("%I64d\n",eular(m));    }}

利用性质打表:

#include<iostream>const int N=300;using namespace std;int ph[N],w[N],p[N],pt;int make(){    int i,j,k;w[1]=1;    for(i=2;i<N;i++)    {    if(!ph[i])p[pt++]=ph[i]=i,w[i]=i-1;        for(j=0;j<pt&&(k=p[j]*i)<N;j++)        {            ph[k]=p[j];            if(ph[i]==p[j]){w[k]=w[i]*p[j];break;}            elsew[k]=w[i]*(p[j]-1);        }    }}int main(){int n;make();while(cin>>n,n){cout<<w[n]<<endl;}}


0 0
原创粉丝点击