poj1284:欧拉函数+原根
生活随笔
收集整理的這篇文章主要介紹了
poj1284:欧拉函数+原根
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
何為原根?
由費馬小定理可知 如果a于p互質 則有a^(p-1)≡1(mod p)
對于任意的a是不是一定要到p-1次冪才會出現上述情況呢?
顯然不是,當第一次出現a^k≡1(mod p)時, 記為ep(a)=k 當k=(p-1)時,稱a是p的原根
每個素數恰好有f(p-1)個原根(f(x)為歐拉函數)
?
定理:對于奇素數m,?原根個數為phi(phi(m)),?由于phi(m)=m-1,?所以為phi(m-1)。
某大牛的證明:
由費馬小定理可知 如果a于p互質 則有a^(p-1)≡1(mod p)
對于任意的a是不是一定要到p-1次冪才會出現上述情況呢?
顯然不是,當第一次出現a^k≡1(mod p)時, 記為ep(a)=k 當k=(p-1)時,稱a是p的原根
每個素數恰好有f(p-1)個原根(f(x)為歐拉函數)
?
定理:對于奇素數m,?原根個數為phi(phi(m)),?由于phi(m)=m-1,?所以為phi(m-1)。
某大牛的證明:
{xi%p | 1 <= i <= p - 1} = {1,2,...,p-1} 等價于?{xi%(p-1) | 1 <= i <= p - 1} = {0,1,2,...,p-2},即為(p-1)的完全剩余系
若x,x2...x(p-1)是(p-1)的完全剩余系,
根據定理,可以推出若gcd(x, p-1) = 1時,?(1,x,...,x(p-2))也是(p-1)的完全剩余系
因為若xi?!= 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) //未被篩到。是素數,則用此素數來篩 {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]);} }?
轉載于:https://www.cnblogs.com/oneshot/p/3979863.html
總結
以上是生活随笔為你收集整理的poj1284:欧拉函数+原根的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 群辉安装linux软件下载,群晖系统Sy
- 下一篇: java代理的学习,通过类实现接口来实现