#include<stdio.h> #include<math.h> #include<algorithm> using namespace std; int D[111]; //存放拆解的数字 int DI=0; //D的数组下标 bool isPrime(int n) { if(n<=1) return 0; int sqr=(int)sqrt(1.0*n); for(int i=2 ; i<sqr+1 ; ++i) if(0==n%i) return 0; return 1; } int main() { int n,d; while(scanf("%d",&n)!=EOF) { if(n<0) //循环退出的条件 break; scanf("%d",&d); if(isPrime(n)==1) //输入数字是素数 { DI=0; do //【skill】do……while法。转为d进制 { D[DI++]=n%d; n/=d; }while(n!=0); int n2=0; for(int i=0 ; i<DI ; ++i) //生成n逆序的d进制数n2 { n2=n2*d+D[i]; //【warining】n2=千万不要习惯性写成n2+=!!!!! } if(isPrime(n2)==1) //也是素数,则Yes { printf("Yes\n"); continue; } } printf("No\n"); //转变数不是素数或者输入就不是素数,直接No } return 0; }
时间: 2024-09-30 07:25:23