欧拉函数&&欧拉定理

来源:互联网 发布:新浪网的域名 编辑:程序博客网 时间:2024/05/17 05:01
在数论中,对正整数n,欧拉函数是小于或等于n的数中与n互质的数的数目。
n的欧拉函数值记为:  F(n)
那么,我们是怎样求欧拉函数的值呢?
方法是这样的:
其实求欧拉函数值还有一种方法:即利用递推法求欧拉函数值

 
算法原理:开始令i的欧拉函数值等于它本身,如果i为偶数,可以利用定理:
当n为奇数的时候  F[2*N]=F[N];

变为求奇数的。
若p是一个正整数满足,那么p是素数,在遍历过程中如果遇到欧拉函数值等于自身的情况,那么说明该数为素数。把这个数的欧拉函数值改变,同时也把能被该素因子整除的数改变。
#include <iostream>#include <cstdio>using namespace std;int  phi(int n)//递推写法{    int rea=n,i;    for(i=2;i*i<=n;i++){        if(n%i==0){           rea=rea-rea/i;           while(n%i==0)                n/=i;        }    }    if(n>1)        rea=rea-rea/n;    return rea;}const int N = 100001;int p[N];void phi(int n)//利用定理写法p(2*n)=p(n){    for(int i=1;i<N;i++) p[i]=i;    for(int i=2;i<N;i+=2) p[i]>>=1;    for(int i=3;i<N;i+=2){        if(p[i]==i){            for( int j=i;j<N;j+=i)                p[j]=p[j]-p[j]/i;        }    }}int main(){    int n;    while(cin>>n){        cout<<phi(n)<<endl;    }    return 0;}

最后,我们来介绍一下欧拉定理:




0 0
原创粉丝点击