Pseudoprime numbers伪素数(快速幂+判定素数)

http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=1469&cid=1142

View Code
 1 #include<stdio.h>  
 2 #include<math.h>  
 3 int isprime(long n)  
 4 {  
 5     long i,k;  
 6     k=sqrt(n);  
 7     for(i=2;i<=k;i++)  
 8     {  
 9         if(n%i==0)  
10          return 0;  
11     }  
12     return 1;  
13 }  
14 long mod(long a,long n,long p)  
15 {  
16     long t;  
17     if(n==0) return 1%p;  
18     if(n==1) return a%p;  
19     t=mod(a,n/2,p);  
20     t=t*t%p;  
21     if(n%2==1) t=t*a%p;  
22     return t;  
23 }  
24 int main()  
25 {  
26    long p, a ;  
27    while(scanf("%ld %ld",&p, &a),p!=0&&a!=0)  
28    {  
29       if(isprime(p))  
30       printf("no\n") ;  
31       else  
32       {  
33           if(a==mod(a, p, p))  
34            printf("yes\n") ;  
35           else printf("no\n") ;  
36       }  
37    }  
38   return 0;  
39 }  
40   

 

 

posted @ 2013-01-29 22:11  yelan@yelan  阅读(220)  评论(0编辑  收藏  举报