首页 > 其他 > 详细

【快速幂】POJ3641 - Pseudoprime numbers

时间:2015-09-16 00:46:54      阅读:234      评论:0      收藏:0      [点我收藏+]

 输入a和p。如果p不是素数,则若满足ap = a (mod p)输出yes,不满足或者p为素数输出no。最简单的快速幂,啥也不说了。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 using namespace std;
 6 typedef long long ll;
 7 ll p,a; 
 8 
 9 int whether(int p)
10 {
11     int f=1;
12     for (int i=2;i*i<=p;i++)
13         if (p%i==0)
14         {
15             f=0;
16             break;
17         }
18     return f;
19 }
20 
21 int submain()
22 {
23     ll res=1,n=p,x=a;
24     while (n>0)
25     {
26         if (n&1) res=res * x % p;
27         /*如果n最后一位是一,那么乘上x*/
28         x=x*x % p;
29         n>>=1;
30         /*右移以为,即除以二*/
31     }
32     return (res==a);
33 }
34 
35 int main()
36 {
37     while (scanf("%lld%lld",&p,&a))
38     {
39         if (p==a && a==0) break;
40         if (!whether(p))
41         {
42             if (submain()) cout<<"yes"<<endl;
43                 else cout<<"no"<<endl;
44         }
45         else
46             cout<<"no"<<endl;
47     } 
48     return 0;
49 }

 

【快速幂】POJ3641 - Pseudoprime numbers

原文:http://www.cnblogs.com/iiyiyi/p/4811786.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!