PAT甲級真題 1015 Reversible Primes

一、題目
在這裏插入圖片描述
二、思路
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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章