#include<iostream> #include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> #include<algorithm> #include<map> #include<vector> #include<queue> using namespace std; //题大意:判断某数若是素数,其在某进制下反转后是否为素数 //key:判断素数,进制转换,逆序 //判断n是否为素数 bool isPrime(int n){ if(n<=1) return false; int sqr=(int)sqrt(1.0*n); for(int i=2 ;i<=sqr; i++){ if(n%i == 0) return false; } return true; } int d[111]; int main(){ int n,radix; while(scanf("%d",&n) != EOF ){ if(n<0) break; //当n是负数时,退出循环 scanf("%d",&radix); if(isPrime(n) == false ){ //n不是素数,输出No,结束算法 printf("No\n"); }else{ //n是素数,判断n在radix进制下的逆序是否为素数 int len=0; do{ //进行转换 d[len++]=n%radix; n/=radix; }while(n!= 0); for(int i=0; i<len ; i++){ //按!!逆序!!转换机制 n=n*radix +d[i]; } if(isPrime(n) == true) printf("Yes\n"); //逆序是素数 else printf("No\n"); } } return 0; }