poj1284 Primitive Roots

考虑互质的两个数a < n, a是n的原根当且仅当对任意的p < φ(n)有amod n ≠ 1(φ(n)是n的欧拉函数)。

也即等价于集合ap(p < φ(n)) 与n的简化剩余系相等。

判定a(< n)是否是n的原跟的方法:

计算φ(n)的质因数集合{p1, p2, ..., pk) , 若aφ(n)/pi mod n ≠ 1,则a是n的原根。

这样的a共有φ(φ(n))个。

http://poj.org/problem?id=1284

 1 #include <cstdio>
 2 #include <cmath>
 3 using namespace std;
 4 int n;
 5 int prime[100], k;
 6
 7 void solve(){
 8     int m = n - 1;
 9     k = 0;
10     if(m % 2 == 0){
11         prime[k++] = 2;
12         while(m % 2 == 0) m /= 2;
13     }
14     int mid = (int)sqrt(m);
15     for(int i = 3; i <= mid; i += 2){
16         if(m % i == 0){
17             prime[k++] = i;
18             while(m % i == 0) m /= i;
19             mid = (int)sqrt(m);
20         }
21     }
22     if(m != 1) prime[k++] = m;
23     int ans = n - 1;
24     for(int i = 0; i < k; i++) ans /= prime[i];
25     for(int i = 0; i < k; i++) ans *= prime[i] - 1;
26     printf("%d\n", ans);
27 }
28
29 int main(){
30     while(~scanf("%d", &n)) solve();
31     return 0;
32 }

时间: 2024-08-11 03:38:31

poj1284 Primitive Roots的相关文章

poj1284——Primitive Roots(欧拉函数)

Description We say that integer x, 0 < x < p, is a primitive root modulo odd prime p if and only if the set { (xi mod p) | 1 <= i <= p-1 } is equal to { 1, -, p-1 }. For example, the consecutive powers of 3 modulo 7 are 3, 2, 6, 4, 5, 1, and t

[POJ1284]Primitive Roots(原根性质的应用)

题目:http://poj.org/problem?id=1284 题意:就是求一个奇素数有多少个原根 分析: 使得方程a^x=1(mod m)成立的最小正整数x是φ(m),则称a是m的一个原根 然后有这样的定理: 1.所有奇素数都有原根 2.如果一个数n有原根,那么原根个数为φ(φ(n)) 由性质2就可知道,对于此题的奇素数n,结果就是φ(n-1)

POJ1284 Primitive Roots (原根)

题目链接:http://poj.org/problem?id=1284 题目描述: 题目大意: 一个质数原根的个数 题解: 结论题 一个数n的原根的个数等于$\varphi(\varphi(n))$ #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<cmath> using namespace std; const int N=65

Primitive Roots(poj1284)

Primitive Roots Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3928   Accepted: 2342 Description We say that integer x, 0 < x < p, is a primitive root modulo odd prime p if and only if the set { (xi mod p) | 1 <= i <= p-1 } is eq

poj 1284 Primitive Roots(未完)

Primitive Roots Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3155   Accepted: 1817 Description We say that integer x, 0 < x < p, is a primitive root modulo odd prime p if and only if the set { (xi mod p) | 1 <= i <= p-1 } is eq

POJ 1284 Primitive Roots (求原根个数)

Primitive Roots 题目链接:http://poj.org/problem?id=1284 利用定理:素数 P 的原根的个数为euler(p - 1) typedef long long ll; using namespace std; /* 求原根 g^d ≡ 1(mod p) 其中d最小为p-1,g 便是一个原根 复杂度:O(m)*log(P-1)(m为p-1的质因子个数) */ ll euler(ll x) { ll res = x; for (ll i = 2; i <= x

poj 1284 Primitive Roots 【原根】【数论】

题目链接 :传送门 题目大意: 求一个质数的原根个数. 先普及一下原根的定义: 设m是正整数,a是整数,若a模m的阶等于euler(m),则称a为模m的一个原根. eg: m=7,euler(7) =  6(1,2,3,4,5,6) 则: 1   1^(n)mod7=1! = 6 2   2^(n)mod7={2 4 1}!=6 3   3^(n)mod7={3,2,6,4,5,1}==6   故3是模7的原根 4   4^(n)mod7={4,2,1}!=6 5   5^(n)mod7={5,

POJ 1284 Primitive Roots (原根)

Primitive Roots Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3219   Accepted: 1858 Description We say that integer x, 0 < x < p, is a primitive root modulo odd prime p if and only if the set { (xi mod p) | 1 <= i <= p-1 } is eq

POJ 1284 Primitive Roots

Primitive Roots Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5481   Accepted: 3101 Description We say that integer x, 0 < x < p, is a primitive root modulo odd prime p if and only if the set { (xi mod p) | 1 <= i <= p-1 } is eq