A reversible prime in any number system is a prime whose "reverse" in that number system is also a prime. For example in the decimal system 73 is a reversible prime because its reverse 37 is also a prime.
Now given any two positive integers N (< 105) and D (1 < D <= 10), you are supposed to tell if N is a reversible prime with radix D.
Input Specification:
The input file consists of several test cases. Each case occupies a line which contains two integers N and D. The input is finished by a negative N.
Output Specification:
For each test case, print in one line "Yes" if N is a reversible prime with radix D, or "No" if not.
Sample Input:73 10
23 2
23 10
-2
Sample Output:
Yes
Yes
No
/* 题目的意思是给定数10进制数N和进制D,将N转化成D进制, 再将D进制的数反转,最后转化为10进制数M,判断N和M是否都是质素。 */ #include<iostream> #include<string> #include<math.h> #include<vector> using namespace std; bool IsPrime(int n) { if(n<2) return false; for(int i=2;i<=sqrt(n);++i)//必须是<=才是求素数 { if(n%i==0) return false; } return true; } int ReverseNumber(int s,int radix) { int num[100],cnt=0; int sum=0; while(s) { num[cnt++]=s%radix; s=s/radix; } for(int i=0;i<cnt;++i) { sum*=radix; sum+=num[i]; } return sum; } int main() { int s,radix; while(cin>>s>>radix) { if(radix<0) break; if(IsPrime(s)&&IsPrime(ReverseNumber(s,radix))) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }