poj1284:欧拉函数+原根
生活随笔
收集整理的這篇文章主要介紹了
poj1284:欧拉函数+原根
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
何為原根?
由費(fèi)馬小定理可知 如果a于p互質(zhì) 則有a^(p-1)≡1(mod p)
對(duì)于任意的a是不是一定要到p-1次冪才會(huì)出現(xiàn)上述情況呢?
顯然不是,當(dāng)?shù)谝淮纬霈F(xiàn)a^k≡1(mod p)時(shí), 記為ep(a)=k 當(dāng)k=(p-1)時(shí),稱a是p的原根
每個(gè)素?cái)?shù)恰好有f(p-1)個(gè)原根(f(x)為歐拉函數(shù))
?
定理:對(duì)于奇素?cái)?shù)m,?原根個(gè)數(shù)為phi(phi(m)),?由于phi(m)=m-1,?所以為phi(m-1)。
某大牛的證明:
由費(fèi)馬小定理可知 如果a于p互質(zhì) 則有a^(p-1)≡1(mod p)
對(duì)于任意的a是不是一定要到p-1次冪才會(huì)出現(xiàn)上述情況呢?
顯然不是,當(dāng)?shù)谝淮纬霈F(xiàn)a^k≡1(mod p)時(shí), 記為ep(a)=k 當(dāng)k=(p-1)時(shí),稱a是p的原根
每個(gè)素?cái)?shù)恰好有f(p-1)個(gè)原根(f(x)為歐拉函數(shù))
?
定理:對(duì)于奇素?cái)?shù)m,?原根個(gè)數(shù)為phi(phi(m)),?由于phi(m)=m-1,?所以為phi(m-1)。
某大牛的證明:
{xi%p | 1 <= i <= p - 1} = {1,2,...,p-1} 等價(jià)于?{xi%(p-1) | 1 <= i <= p - 1} = {0,1,2,...,p-2},即為(p-1)的完全剩余系
若x,x2...x(p-1)是(p-1)的完全剩余系,
根據(jù)定理,可以推出若gcd(x, p-1) = 1時(shí),?(1,x,...,x(p-2))也是(p-1)的完全剩余系
因?yàn)槿魓i?!= xj?(mod p-1),那么x*xi?!= x*xj?(mod p-1),與條件m矛盾,所以 xi?= xj?(mod p-1),
由此可以確定答案為EulerPhi(p-1)
代碼
#include<stdio.h> #define maxn 66666 int euler[maxn+1]; int phi(int n) {int res=n;for(int i=2;i*i<=n;i++){if(n%i==0){res=res-res/i;while(n%i==0)n/=i;}}if(n>1)res=res-res/n;return res; } //篩法范圍打表 nlogn void phi() {for(int i=1;i<=maxn;i++)euler[i]=i;for(int i=2;i<=maxn;i+=2)euler[i]/=2;for(int i=3;i<=maxn;i++){if(euler[i]==i) //未被篩到。是素?cái)?shù),則用此素?cái)?shù)來篩 {for(int j=i;j<=maxn;j+=i){euler[j]=euler[j]/i*(i-1);}}}return ; } int main() {int n;phi();while(scanf("%d",&n)!=EOF){printf("%d\n",euler[n-1]);} }?
轉(zhuǎn)載于:https://www.cnblogs.com/oneshot/p/3979863.html
總結(jié)
以上是生活随笔為你收集整理的poj1284:欧拉函数+原根的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 群辉安装linux软件下载,群晖系统Sy
- 下一篇: java代理的学习,通过类实现接口来实现