poj 3461

http://poj.org/problem?id=3641

 1 #include"iostream"
 2 #include"cmath"
 3 using namespace std;
 4 bool isprime(long long n){
 5     if(n==2)
 6         return true;
 7     if(n<=1||n%2==0)
 8         return false;
 9     long long j = 3;
10     while(j<=(long long )sqrt((double)n)){
11         if(n%j==0)
12             return false;
13         j += 2;//已经排出了偶数。。。
14     }
15     return true;
16 }
17 long long milur(long long a,long long b,long long m){
18     long long c = 1;
19     while(b>1){//快速幂乘
20         if(b%2!=0){
21             c = c*a%m;
22             b = b-1;
23             
24         }
25         a = a*a%m;
26         b = b/2;
27     }
28     a = a*c%m;
29     return a;
30 }
31 int main(){
32     long long p,a;
33     while(cin>>p>>a){
34         if(p==0&&a==0)
35             break;
36         if(isprime(p)){//如果是素数,即输出
37             cout<<"no"<<endl;
38         }
39         else{//不是素数,在判断是是否是伪素
40             if(milur(a,p,p)==a)//费马小定理。。。。
41                     cout<<"yes"<<endl;
42             else {
43                 cout<<"no"<<endl;
44             }
45         }
46     }
47     return 0;
48 }

 

 刚开始向完全用拉宾—米勒测试,来做来着,,可是一直没做成。。。找了个题(foj上的) 交 一直WA,。。。。以后会了再改吧。。。。

posted @ 2013-05-27 23:25  夜晓楼  阅读(154)  评论(0编辑  收藏  举报