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

Miller Robbin测试模板(无讲解)

时间:2019-04-08 15:22:00      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:one   eve   ase   play   sync   name   main   --   img   

技术图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long int ll;
 4 ll T,n;
 5 ll qpow(ll x,ll y,ll mod)
 6 {
 7     ll ans=1,base=x;
 8     while(y)
 9     {
10         if(y&1)ans=ans*base%mod;
11         base=base*base%mod;
12         y>>=1;
13     }
14     return ans;
15 }
16 bool check(ll p,ll a,ll m,ll q)
17 {
18     if(a==p)return 1;
19     ll base=qpow(a,m,p);
20     ll last=base;
21     for(int i=1;i<=q;++i)
22     {
23         base=base*base%p;
24         if(base==1&&last!=1&&last!=p-1)return 0;
25         last=base;
26     }
27     if(base!=1)return 0;
28     return 1;
29 }
30 bool miller(ll n)
31 {
32     if(n==1)return 0;
33     if(n==2)return 1;
34     if(n%2==0)return 0;
35     ll x=n-1,sum=0;
36     while(x%2==0){++sum;x/=2;}
37     if(!check(n,2,x,sum))return 0;
38     if(!check(n,3,x,sum))return 0;
39     if(!check(n,5,x,sum))return 0;
40     if(!check(n,7,x,sum))return 0;
41     if(!check(n,11,x,sum))return 0;
42     if(!check(n,13,x,sum))return 0;
43     if(!check(n,17,x,sum))return 0;
44     return 1;
45 }
46 int main()
47 {
48     ios::sync_with_stdio(false);
49     cin>>T;
50     while(T--)
51     {
52         cin>>n;
53         cout<<n<<" "<<(miller(n)==1?"Yes":"No")<<endl;
54     }
55     return 0;
56 }
View Code

 

Miller Robbin测试模板(无讲解)

标签:one   eve   ase   play   sync   name   main   --   img   

原文地址:https://www.cnblogs.com/GreenDuck/p/10670479.html

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