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 }