문제

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

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

입력

첫째 줄에 N이 주어진다.

출력

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

예제 입력 1

31

예제 출력 1

101

더보기

Solution

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

bool isPrime(int N)
{
	if(N<2)
		return false;
	else if(N==2)
		return true;
	else if(N%2==0)
		return false;
	else
		for(int i=3;i*i<=N;i+=2)
			if(N%i==0)
				return false;
	return true;
}

bool isPalindrome(char *str,int length)
{
	for(int i=0;i<length/2;i++)
		if(str[i]!=str[length-1-i])
			return false;
	return true;
}

int main(void)
{
	int N;
	char str[8]={'\0', };

	scanf("%d", &N);
	sprintf(str,"%d",N);

	while(!isPrime(N)||!isPalindrome(str,strlen(str)))
		sprintf(str,"%d",++N);

	printf("%d\n", N);
	return 0;
}
728x90

+ Recent posts