POJ 1284 : Primitive Roots - 欧拉函数,原根
来源:互联网 发布:义乌淘宝网店摄影培训 编辑:程序博客网 时间:2024/06/16 05:19
在数论,特别是整除理论中,原根是一个很重要的概念。
对于两个正整数(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 (欧拉函数&原根定理)
- poj 1284 Primitive Roots(欧拉函数,原根定理)
- poj 1284 Primitive Roots(原根+欧拉函数)
- POJ 1284 : Primitive Roots - 欧拉函数,原根
- Primitive Roots +欧拉函数+原根
- POJ 1284 Primitive Roots(原根个数与欧拉函数)
- POJ 1284 Primitive Roots(欧拉函数)
- POJ 1284 Primitive Roots【欧拉函数】
- POJ-1284 Primitive Roots 欧拉函数
- Primitive Roots(Poj1284)(欧拉函数+原根)
- poj1284 Primitive Roots(原根,欧拉函数)
- poj1284 Primitive Roots:欧拉函数+原根
- POJ1284 Primitive Roots (欧拉函数 & 原根)
- poj-1284(Primitive Roots)(欧拉函数运用)
- POJ 1284 Primitive Roots 解题报告(欧拉函数)
- poj 1284 Primitive Roots(数论:欧拉函数)
- hibernate里createSQLQuery
- POJ 2773:Happy 2006 - 第k大与n互素的数
- POJ 1674 : Sorting by Swapping - 置换群
- POJ 3641 : Pseudoprime numbers - 米勒罗宾素数测试
- POJ 2407 : Relatives - 欧拉函数
- POJ 1284 : Primitive Roots - 欧拉函数,原根
- 黑马程序员java基础之io流中的其他流
- POJ 2478 : Farey Sequence - 欧拉函数
- POJ 3090 : Visible Lattice Points - 欧拉函数
- iOS Splash以及更新提示
- POJ 2992 : Divisors - 求组合数的因子个数
- java写文件时,输出不完整的原因以及解决方法close()或flush()
- POJ 2480 : Longge\'s problem - gcd之和
- POJ 3696 : The Luckiest number - 欧拉函数,快速幂[数论好题]