這道題意思是給定數N和進制R,把N轉換成R進制數後再逆置一下得到N1,如果N和N1都是素數就輸出yes,否則輸出No。
思路:打一下表,轉換一下機制判斷一下就行了,應該沒什麼坑,寫了一遍交了就過了。
代碼:
//1015 進制轉換 質數
int a[20],i,prime[100005];
void radix_change(int x,int radix){
//除r取餘法轉進制
i = 0;
while(x>=radix){
a[i++] = x%radix;
x /= radix;
}
a[i] = x;
}
int get_val(int r){
int num = 0;
for(int j=0;j<=i;j++){
num += a[j]*pow(r,i-j);
}
return num;
}
int get_prime(){
bool p;
for(int k=2;k<=100000;k++){
p = true;
for(int j=2;j*j<=k;j++){
if(k%j==0) p = false;
}
if(p) prime[k] = 1;
else prime[k] = 0;
}
}
bool judge(int x,int y){
if(prime[x]&&prime[y])
return true;
return false;
}
int main(){
int n,r;
//打表
get_prime();
while(scanf("%d",&n)!=EOF && (n>0)){
scanf("%d",&r);
radix_change(n,r);
int y = get_val(r);
if(judge(n,y)) printf("Yes\n");
else printf("No\n");
}
return 0;
}