51nod 1135 原根

2019-04-14 19:46发布

1135 原根 题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1135
设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根。(其中φ(m)表示m的欧拉函数) 给出1个质数P,找出P最小的原根。 Input 输入1个质数P(3 <= P <= 10^9) Output 输出P最小的原根。 Input示例 3 Output示例 2 题解:阶:gcd(a,m)=1,使得a^r=1(mod m)成立的最小的 r,称为 a 对 模m 的 阶φ(m):在[1,m)的区间内与m互质的数的个数。因为p为素数,所以φ(p)=p-1, 这题就是要找最小的a使得 a^(p-1)%p = 1 成立(根据费马小定理,该式一定成立),先求p-1所有不同的 质因子 p1,p2…pm,对任何整数 a ∈[1,p-1], 检验 a 是否为 p 的原根,检验方法:a^((p-1)/p1),a^((p-1)/p2),...a^((p-1)/pm) 中是否存在一个 模p 等于 1 ,存在的话 a 就不是 模p 的一个原根(即p-1就不是a对模p的阶),否则a就为原根。