1015. Reversible Primes (20)
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 -2Sample Output:
Yes Yes No
这道题就是一个进制转换的问题,用queue就可以解决啦,另外要注意1不是素数哦。代码如下:
#include <iostream>
#include <cmath>
#include <queue>
using namespace std;
bool prime(int n)
{
int i;
if(n==1)
return false;
if(n<=2)
return true;
else
{
for(i=2;i<=(int)sqrt(n);i++)
if(n%i==0)
break;
if(i<=(int)sqrt(n))
return false;
else
return true;
}
}
int main(int argc, char** argv) {
int N,D,rem,quotient,reverse,count;
cin>>N;
queue<int> queueVar;
while(N>=0)
{
cin>>D;
if(!prime(N))
{
cout<<"No"<<endl;
cin>>N;
continue;
}
quotient=N;
count=0;
reverse=0;
while(quotient>0)
{
rem=quotient%D;
queueVar.push(rem);
quotient=quotient/D;
count++;
}
for(int i=count-1;i>=0;i--)
{
reverse+=pow(D,i)*queueVar.front();
queueVar.pop();
}
if(!prime(reverse))
cout<<"No"<<endl;
else
cout<<"Yes"<<endl;
cin>>N;
}
return 0;
}