这是一道素数判断问题,虽然思路很明确,要注意的是文中的D代表的是素数的进制,但是素数的判断要在十进制的范围内来做。
#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("\n");
scanf("%d",&n);
}
return 0;
}
PAT A1015 Reversible Primes(可逆素数)
原文:https://www.cnblogs.com/shuibeng/p/13559032.html