这是一道素数判断问题,虽然思路很明确,要注意的是文中的D代表的是素数的进制,但是素数的判断要在十进制的范围内来做。
- 一点经验:如果说一道题目已经拿到了大部分的分数,说明代码整体是正确的,只是一些输入的特殊情况没有考虑在内,此时应该重新读题,发现并考虑如何处理这些特殊输出
- 例如bool isprime(int n)函数中对于if(n <= 1 ) return false;的边界判断
#include<cstdio>
#include<math.h>
using namespace std;
const int N = 100010;
bool isprime(int n){
if(n <= 1 ) return false;
int half = (int)sqrt(n*1.0);
bool is_prime = true;
for(int i = 2;i <= half; i ++){
if(n%i==0){
is_prime = false;
}
}
return is_prime;
}
int reverse(int n,int d){
int int_array[N];
int count = 0;
int result = 0;
while(n){
int_array[count++] = n%d;
n = n/d;
}
for(int i = 0;i < count;i++){
result = result*d+int_array[i];
}
return result;
}
int main(){
int n,d;
scanf("%d",&n);
while(n>0){
scanf("%d",&d);
if(!isprime(n)){
printf("No");
}else{
int r = reverse(n,d);
isprime(r)?printf("Yes"):printf("No");
}
printf("
");
scanf("%d",&n);
}
return 0;
}