POJ 1284 : Primitive Roots - 欧拉函数,原根
2015-01-10 21:44
246 查看
题意:整数x是奇素数p的原根,当且仅当~~~blabla时叫做原根;给出一个奇素数p(3<=p<65536),编程求出p的原根的个数。分析:这里需要应用到一个结论: p是素数,则p有phi(p-1)个原根。利用该结论知道,只要算出欧拉函数就行了。
**拓展知识:在数论,特别是整除理论中,原根是一个很重要的概念。对于两个正整数(a,m) = 1,由欧拉定理可知,存在正整数, 比如说欧拉函数d = φ(m),即小于等于 m 的正整数中与 m 互质的正整数的个数,使得。由此,在(a,m) = 1时,定义a对模m的指数Ordm(a)为使成立的最小的正整数d。由前知Ordm(a) 一定小于等于 φ(m),若Ordm(a) = φ(m),则称a是模m的原根。
可以证明,如果正整数(a,m) = 1和正整数 d 满足,则 d 整除 φ(m)。因此Ordm(a)整除φ(m)。在例子中,当a = 3时,我们仅需要验证 3 的 1 、2、3 和 6 次方模 7 的余数即可。
记δ = Ordm(a),则模 m 两两不同余。因此当a是模m的原根时,构成模 m 的简化剩余系。
模m有原根的充要条件是m = 1,2,4,pn,2pn,其中p是奇质数,n是任意正整数。
对正整数(a,m) = 1,如果 a 是模 m 的原根,那么 a 是整数模n乘法群(即加法群 Z/mZ 的可逆元,也就是所有与 m 互素的正整数构成的等价类构成的乘法群)Zn×的一个生成元。由于Zn×有 φ(m)个元素,而它的生成元的个数就是它的可逆元个数,即 φ(φ(m))个,因此当模m有原根时,它有φ(φ(m))个原根。
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
int main(){
int p,i;
while(~scanf("%d",&p)){
p--;
int re=p;
for(i=2;i*i<=p;i++)
if(p%i==0){
re-=re/i;
while(p%i==0)
p/=i;
}
if(p>1)
re-=re/p;
printf("%d\n",re);
}
return 0;
}
**拓展知识:在数论,特别是整除理论中,原根是一个很重要的概念。对于两个正整数(a,m) = 1,由欧拉定理可知,存在正整数, 比如说欧拉函数d = φ(m),即小于等于 m 的正整数中与 m 互质的正整数的个数,使得。由此,在(a,m) = 1时,定义a对模m的指数Ordm(a)为使成立的最小的正整数d。由前知Ordm(a) 一定小于等于 φ(m),若Ordm(a) = φ(m),则称a是模m的原根。
可以证明,如果正整数(a,m) = 1和正整数 d 满足,则 d 整除 φ(m)。因此Ordm(a)整除φ(m)。在例子中,当a = 3时,我们仅需要验证 3 的 1 、2、3 和 6 次方模 7 的余数即可。
记δ = Ordm(a),则模 m 两两不同余。因此当a是模m的原根时,构成模 m 的简化剩余系。
模m有原根的充要条件是m = 1,2,4,pn,2pn,其中p是奇质数,n是任意正整数。
对正整数(a,m) = 1,如果 a 是模 m 的原根,那么 a 是整数模n乘法群(即加法群 Z/mZ 的可逆元,也就是所有与 m 互素的正整数构成的等价类构成的乘法群)Zn×的一个生成元。由于Zn×有 φ(m)个元素,而它的生成元的个数就是它的可逆元个数,即 φ(φ(m))个,因此当模m有原根时,它有φ(φ(m))个原根。
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
int main(){
int p,i;
while(~scanf("%d",&p)){
p--;
int re=p;
for(i=2;i*i<=p;i++)
if(p%i==0){
re-=re/i;
while(p%i==0)
p/=i;
}
if(p>1)
re-=re/p;
printf("%d\n",re);
}
return 0;
}
相关文章推荐
- POJ 1284 Primitive Roots【欧拉函数】
- poj 1284 Primitive Roots(数论:欧拉函数)
- POJ 1284 Primitive Roots(欧拉函数)
- POJ1284 Primitive Roots (欧拉函数 & 原根)
- poj1284 Primitive Roots(原根,欧拉函数)
- poj 1284 Primitive Roots(原根+欧拉函数)
- POJ 1284 Primitive Roots 欧拉函数模板题
- poj 1284 Primitive Roots(原根+欧拉函数)
- POJ1284_Primitive Roots【欧拉函数】
- 【POJ1284】Primitive Roots 欧拉函数
- POJ 1284 Primitive Roots (原根,欧拉函数)
- POJ 1284 Primitive Roots(欧拉函数)
- POJ-1284 Primitive Roots 欧拉函数
- POJ 1284 Primitive Roots 解题报告(欧拉函数)
- poj - 1284 - Primitive Roots - (欧拉函数求原根)
- POJ 1284 Primitive Roots (欧拉函数&原根定理)
- poj 1284 Primitive Roots(欧拉函数,原根定理)
- POJ 1284 Primitive Roots (欧拉函数--求原根数量)
- (Relax 数论1.8)POJ 1284 Primitive Roots(欧拉函数的应用: 以n为模的本原根的个数phi(n-1))
- POJ 1284 - Primitive Roots (原根 + 欧拉函数)