zoukankan      html  css  js  c++  java
  • 51nod1135 原根

    原根判定:$m>2$,$varphi (m)$的不同素数是$q_1,q_2,……,q_s$,$(g,m)=1$,则$g$是$m$的一个原根的充要条件是$g^{frac{varphi(m)}{q_i}} otequiv 1 (mod m)$。

    原根一般很小可以暴力得。

     1 //#include<iostream>
     2 #include<cstring>
     3 #include<cstdlib>
     4 #include<cstdio>
     5 //#include<math.h>
     6 //#include<time.h>
     7 //#include<complex>
     8 #include<algorithm>
     9 using namespace std;
    10 
    11 int p;
    12 int s[44],len=0;
    13 
    14 int powmod(int a,int b)
    15 {
    16     int ans=1;
    17     while (b)
    18     {
    19         if (b&1) ans=1ll*ans*a%p;
    20         a=1ll*a*a%p;
    21         b>>=1;
    22     }
    23     return ans;
    24 }
    25 
    26 int main()
    27 {
    28     scanf("%d",&p);
    29     int tmp=p-1;
    30     for (int i=2;1ll*i*i<=tmp;i++) if (tmp%i==0)
    31     {
    32         s[++len]=i;
    33         while (tmp%i==0) tmp/=i;
    34     }
    35     if (tmp>1) s[++len]=tmp;
    36     for (int i=2;i<=p-1;i++)
    37     {
    38         bool flag=1;
    39         for (int j=1;j<=len;j++) if (powmod(i,(p-1)/s[j])==1) {flag=0; break;}
    40         if (flag) {printf("%d
    ",i); break;}
    41     }
    42     return 0;
    43 }
    View Code
  • 相关阅读:
    list和set的区别
    tcp与udp协议的区别
    c3p0的数据库连接池
    mysql的连接
    HAVING 的使用 及笛卡尔积
    break-跳出内循环
    求素数(范围自改)
    1-100累加
    1-100累乘
    类实例:飞机大战
  • 原文地址:https://www.cnblogs.com/Blue233333/p/8470571.html
Copyright © 2011-2022 走看看