HDU 1905 Pseudoprime numbers

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1905

题意:给一个 p 和 一个 a,如果这个p 本身就是一个素数,就输出 no,如果不是素数,那么计算  ( a ^ p) % p 如果结果等于 a 那么输出 yes 否则输出 no

也就是伪素数。

View Code
 1 #include<stdio.h>
 2 #include<math.h>
 3 __int64 jud(__int64 n)
 4 {
 5     __int64 i;
 6     for(i=2;i*i<n;i++)
 7         if(n%i==0)
 8         return 0;
 9    return 1;
10 }
11 __int64 sum(__int64 a,__int64 p,__int64 m)
12 {
13     __int64 s;
14     if(p==0)
15         return 1;
16     if(p%2==0)
17     { 
18         s=sum(a,p/2,m);
19       return (s*s)%m; 
20     }
21     else
22         return 
23         (a%m)*sum(a,p-1,m)%m;
24 
25 }
26 int main()
27 {
28     __int64 p,a,i;
29     while(~scanf("%I64d %I64d",&p,&a))
30     {
31         if(p==0&&a==0)
32             break;
33         if(jud(p))
34         {
35             printf("no\n");
36             continue;
37         }
38         if(sum(a,p,p)==a)
39             printf("yes\n");
40             else
41             printf("no\n");
42     }
43     return 0;
44 }

 

 

posted @ 2012-08-03 20:37  时光旅行的懒猫  阅读(420)  评论(0编辑  收藏  举报