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
——————————
主要的问题是对于radix和题目的理解。
自身是素数,并且其对于radix的反转整数如果也为素数就可以了
1,N进制数出现了N+1?
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.
这句话可以看出N是一个数的十进制表示,N (< 105)。
所以它和后面的D没有关系。
http://www.educity.cn/wenda/384034.html
#include <iostream>
#include <algorithm>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
bool isP(int n)
{
int i=0;
if(n==0|| n==1) return false;
for(i=2; i*i<=n; i++)
{
if(n%i==0)
{
return false;
}
}
return true;
}
int conver10(int n, int d)
{
int res=0;
int tmp=1;
while(n>0)
{
res+=(n%10)*tmp;
tmp=tmp*d;
n/=10;
}
return res;
}
int rever(int n, int d)
{
int res=0;
int i=1,tn=n;
while(tn>0)
{
i*=d;
tn/=d;
}
i/=d;
while(n>0)
{
res+=(n%d)*i;
i/=d;
n/=d;
}
return res;
}
int main(int argc, char** argv) {
int N,D;
int t=0;
cin>>N;
while(N>=0)
{
cin>>D;
if(!isP(N))
{
cout<<"No"<<endl;
cin>>N;
continue;
}
else
{
t=rever(N,D);
if(isP(t))
{
cout<<"Yes"<<endl;
cin>>N;
}
else
{
cout<<"No"<<endl;
cin>>N;
}
}
}
return 0;
}