先判断n是否为素数
然后把n转化成d进制下再反转,转化为十进制的num
判断num是否为素数
注意n为0和1时,不是素数!!!
注意反转后的num也有可能为1,不是素数!!!
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> using namespace std; int n,d; bool isprime(int n){ //注意n或者反转后的n为0或1的情况 if(n==0 || n==1) return false; int fac=sqrt(n); for(int i=2;i<=fac;i++){ if(n%i==0) return false; } return true; } int main() { while(1){ scanf("%d",&n); if(n<0) break; scanf("%d",&d); if(!isprime(n)){ printf("No\n"); continue; } int remainder; int num=0; //num即为n在d进制下反转后,再转化成十进制的数字 while(n){ remainder=n%d; num=num*d+remainder; n=n/d; } if(isprime(num)) printf("Yes\n"); else printf("No\n"); } return 0; }