티스토리 뷰

 

두 가지 문제가 섞여있다. 입력받은 숫자를 뒤집고 그 숫자를 다시 소수 판별한다.

10만 범위의 숫자를 100번 이하로 입력받는다는 조건에서 소수에 대한 배열을 만들어놓으면 더 편할 것이라고 생각했는데, 이정도는 그냥 소수판별 함수로 해도 된다.

소수 판별은 2부터 자기자신-1 까지의 숫자로 나눠지지 않는다면 소수이다. 

 

주의해야할 사항이 있다. 만약에 100을 입력받았다면 1로 뒤집어지고 그것이 소수로 판별된다.

1은 소수가 아니다.이를 막기 위해서 조건문을 더해서 1이 입력된 경우 false를 리턴하도록 한다.

#include<stdio.h>

int reverse(int x) {
	int res = 0;
	int temp;
	while (x > 0) {
		temp = x % 10;
		res = (res * 10) + temp;
		x = x / 10;
	}
	return res;
}

bool isPrime(int x) {
	if (x == 1) return false;
	bool flag = true;

	for (int i = 2; i < x; i++) {
		if (x%i == 0) {
			flag = false;
			break;
		}
	}
	return flag;
}

int main() {
	int num, val, temp;
	scanf("%d", &num);
	for (int i = 1; i <= num; i++) {
		scanf("%d", &val);
		temp = reverse(val);
		if (isPrime(temp)) {
			printf("%d ", temp);
		}
	}
	return 0;
}
댓글