码迷,mamicode.com
首页 > 其他好文 > 详细

51nod1135 原根

时间:2018-02-26 11:27:32      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:scanf   view   pow   blog   pos   技术分享   class   body   cstring   

原根判定:$m>2$,$\varphi (m)$的不同素数是$q_1,q_2,……,q_s$,$(g,m)=1$,则$g$是$m$的一个原根的充要条件是$g^{\frac{\varphi(m)}{q_i}} \not\equiv 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\n",i); break;}
41     }
42     return 0;
43 }
View Code

 

51nod1135 原根

标签:scanf   view   pow   blog   pos   技术分享   class   body   cstring   

原文地址:https://www.cnblogs.com/Blue233333/p/8470571.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!