poj - 3641 题解
Posted 远见望远
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj - 3641 题解相关的知识,希望对你有一定的参考价值。
题意:检验一个数是否是质数,且满足ap = a (mod p)
题解:快速幂,质数检验
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 using namespace std; 6 long long power(long long a,long long b,long long c) 7 { 8 long long res,t; 9 res=1; 10 t=a%c; 11 while(b) 12 { 13 if(b&1) 14 { 15 res*=t; 16 res%=c; 17 } 18 t*=t; 19 t%=c; 20 b>>=1; 21 } 22 return res; 23 } 24 bool is_prime(int x) 25 { 26 bool res=true; 27 for(int i=2;i<=sqrt(x);i++) 28 { 29 if(x%i==0) 30 { 31 res=false; 32 } 33 } 34 return res; 35 } 36 int main() 37 { 38 long long p,a; 39 while(true) 40 { 41 cin>>p>>a; 42 if(p==0&&a==0) 43 { 44 break; 45 } 46 if(is_prime(p)) 47 { 48 cout<<"no\n"; 49 continue; 50 } 51 if(power(a,p,p)==a) 52 { 53 cout<<"yes\n"; 54 } 55 else 56 { 57 cout<<"no\n"; 58 } 59 } 60 return 0; 61 }
以上是关于poj - 3641 题解的主要内容,如果未能解决你的问题,请参考以下文章
POJ 3641 Pseudoprime numbers(快速幂)
Pseudoprime numbers POJ 3641(快速幂)
POJ-3641 Pseudoprime numbers---快速幂