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,。。。。以后会了再改吧。。。。