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.
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.
For each test case, print in one line Yes if N is a reversible prime with radix D, or No if not.
Tips:
(1)在D进制下把数字n反转:想一想是不是和在10进制下反转是一样的呢?并不用先转换为D进制,再反转,再转换为10进制。
(2)此题素数判断要求到了1e5,使用素数筛法会造成MLE。
#include<iostream> using namespace std; int reverse(int n,int d){//reverse any number with d redix int ans = 0; while(n){ ans = ans*d+n%d; n/=d; } return ans; } bool isPrime(int x){//judge if it is a prime number if(x<2) return false; for(int i=2;i*i<=x;i++){ if(x%i==0) return false; } return true; } int main(void){ int n,d; while(cin>>n){ if(n<0) break; cin>>d; if(isPrime(n)&&isPrime(reverse(n,d)))cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }
