一、題目
二、思路
1、題意:
給定一個十進制數N,若N爲素數,且判斷如下數是不是素數:將N轉換爲D進制數,再反序,再轉換爲十進制數,若這個數爲素數,則N爲Reversible Prime。
2、注意:
1)先判斷N是不是素數;
2)1不是素數,這是第三個測試點考察細節;
3)素數判斷的細節;
4)用數組存儲進制轉換後的數,int裝不下;
三、代碼
#include <stdio.h>
#include <math.h>
int n, d, obj[100];
void clearup() {
for (int i = 0; i < 100; i++)
obj[i] = 0;
return;
}
int reverse() {
int r=0, q=n, len=0,i,res=0,ind=1;
do {
r = q % d; q = q / d;
obj[len++] = r;
} while (q != 0);
for (i = len-1; i >= 0; i--) {
res += obj[i] * ind;
ind *= d;
}
return res;
}
int isprime(int num) {
int p = sqrt(num);
if (num <= 1)
return 0;
for (int i = 2; i <= p; i++) {//i <= p,沒有這個=,第五個測試點過不去
if (num % i == 0)
return 0;
}
return 1;
}
int main() {
while (1) {
clearup();
scanf("%d", &n);
if (n < 0)
break;
scanf("%d", &d);
if (!isprime(n)) {
printf("No\n");
continue;
}
if (isprime(reverse()))
printf("Yes\n");
else
printf("No\n");
}
return 0;
}