题目描述
给定两个整数 N 和 D,如果 N 是一个质数,并且将 N 转化为 D 进制表示后,再进行反转,得到的新数字转化为十进制表示后如果也是一个质数,则称 N 在 D 进制系统中,是一个可逆质数。
例如,N=73,D=10,则 73 是质数,其十进制表示反转后为 37 也是质数,所以 73 在十进制系统中是一个可逆质数。
N=23,D=2,则 23 是质数,其二进制表示为 10111,反转后得到 11101,转化为十进制后为 29,这也是一个质数,所以 23 在二进制系统中是一个可逆质数。
现在,请你判断所给 N 在 D 进制系统中是否是一个可逆质数。
输入格式
输入包含多组测试数据。
每组数据共一行,包含两个整数 N 和 D。
当输入一行为一个负数时,表示输入停止。
输出格式
对于每组数据,输出一个结果,占一行。
如果所给 N 在 D 进制系统中是一个可逆质数,则输出 Yes,否则输出 No。
数据范围
1≤N<105,
1<D≤10
C++ 代码
写的比较复杂,QAQ
#include<iostream>
using namespace std;
int n,d;
bool is_prime(int n){
if(n<2){
return false;
}
for(int i=2;i<=n/i;i++){
if(n%i==0)
return false;
}
return true;
}
int mypow(int num){
int res=0;
while(num){
res=res*d+num%d;
num/=d;
}
return res;
}
int main(){
while(1){
cin>>n>>d;
if(n<0)
break;
if(!is_prime(n))
cout<<"No"<<endl;
else if(is_prime(mypow(n))){
cout<<"Yes"<<endl;
}else{
cout<<"No"<<endl;
}
}
return 0;
}