문제 링크


🔷 분류

수학, 브루트포스 알고리즘, 정수론, 소수 판정, 에라토스테네스의 체

✒️ 문제 설명

어떤 수와 그 수의 숫자 순서를 뒤집은 수가 일치하는 수를 팰린드롬이라 부른다. 예를 들어 79,197과 324,423 등이 팰린드롬 수이다.

어떤 수 N (1 ≤ N ≤ 1,000,000)이 주어졌을 때, N보다 크거나 같고, 소수이면서 팰린드롬인 수 중에서, 가장 작은 수를 구하는 프로그램을 작성하시오.

⬅️ 입력

첫째 줄에 N이 주어진다.

➡️ 출력

첫째 줄에 조건을 만족하는 수를 출력한다.

💻 코드 (C++)

#include <iostream>
#include <string>
#include <cmath>
using namespace std;

bool check(int num) {
	string str = to_string(num); 
	int s = 0;
	int e = str.size() -1;
	while(s < e) {
		if(str[s] != str[e]) return false;
		s++;
		e--;
	}
	return true;
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	int n;
	cin >> n;
	long A[10000001];
	for(int i = 2; i < 10000001; i++) A[i] = i;
	for(int i = 2; i < sqrt(10000001); i++) { // 에라토스테네스의 체
		if(A[i] == 0) continue;
		for(int j = i + i; j < 10000001; j += i) A[j] = 0;
	}
	
	while(true) {
		if(A[n] != 0) { // 소수 check
			if(check(A[n])) { // 팰린드롬 check
				cout << A[n];
				break;
			}
		}
		n++;
	}
	return 0;
}

글 이동

Comments