zoukankan      html  css  js  c++  java
  • 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
    ", ans);
    27 }
    28 
    29 int main(){
    30     while(~scanf("%d", &n)) solve();
    31     return 0;
    32 }
    View Code
  • 相关阅读:
    练习5.6.3节
    size_t
    练习3.43
    use include to read a file
    ACM数学(转)
    POJ 2039 To and Fro
    poj 1716 差分约束
    poj 3159 差分约束
    hdu 4571 floyd+动态规划
    poj 1364 差分约束
  • 原文地址:https://www.cnblogs.com/astoninfer/p/4805591.html
Copyright © 2011-2022 走看看