어떤 수와 그 수의 숫자 순서를 뒤집은 수가 일치하는 수를 팰린드롬이라 부른다. 예를 들어 79,197과 324,423 등이 팰린드롬 수이다.
어떤 수 N (1 ≤ N ≤ 1,000,000)이 주어졌을 때, N보다 크거나 같고, 소수이면서 팰린드롬인 수 중에서, 가장 작은 수를 구하는 프로그램을 작성하시오.
첫째 줄에 N이 주어진다.
첫째 줄에 조건을 만족하는 수를 출력한다.
31
101
이 문제는 에라토스테네스의 체를 이용해서 소수를 먼저 판별한 뒤에 회문을 체크하는 방식으로 문제를 풀 수 있었다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
boolean[] flag = new boolean[1003002];
int N = 1003001;
flag[1] = true;
for(int i=2; i*i<=N; i++) { //에라토스테네스의 체, flag가 true면 소수가 아님
for(int j=i*i; j<=N; j+=i) {
if(!flag[j])
flag[j] = true;
}
}
int num = Integer.parseInt(input);
for(int i=num; i<=N; i++) { //N이상의 수 중에서 소수인것을 회문인지 체크
if(!flag[i]) {
if(!check_pend(i)) {
System.out.println(i);
break;
}
}
}
}
public static boolean check_pend(int num) {
String str = Integer.toString(num);
int len = str.length();
boolean p = false;
for(int i=0; i<len/2; i++) {
if(str.charAt(i) != str.charAt(len - i - 1)) {
p = true;
break;
}
}
return p;
}
}