import math
#prime func
def primeNumber(x):
for i in range(2,int(math.sqrt(x))+1):
if x % i ==0:
return False
return True #소수당
n = int(input())
max = 1000001
cnt =0
for i in range(n,max):
if i == 1:
continue
if str(i)==str(i)[::-1]: #펠
if primeNumber(i) :
cnt = i
break
if cnt == 0 :
cnt = 1003001
print(cnt)
펠린드롬과 소수를 모두 고려해줘야 하는 문제이다.
알고리즘 분류에 에라토스테네스의 체를 쓰는것도 포함됐으나 생각해보니 굳이 그럴필요가 없을거 같아 소수 판별 함수를 작성했다.
그 이유는 !
처음에 생각한 방식이 에라토스테네스의 체를 활용하여 모든 소수를 구한 후 그 소수 중 펠린을 만족하는 값을 구하는 것이였는데 그렇게 하면 굳이 구할필요가 없는 소수도 구해야하는 과정을 거쳐야하기에 시간이 더 많이 걸릴거 같았다 !
그래서 생각의 방향을 바 꿨다!
이 방법을 활용하여 펠린드롬을 먼저 체크하고 그 펠린드롬이 소수인지 확인하고 맞다면 출력하면된다 !
그 이유는 펠린드롬이고 소수인것중 n이상의 값중 제일 최솟값을 출력하면 되기 때문이다
그런데 !
[::-1]은 이번에 처음 봤다 ! 이것이 무엇일까?
[start:stop:step] 이다!
-1스텝씩 출력하는것이니 마지막부터 출력한다고 생각하면된다 !
그러므로
arr = '1234' 라면
arr[::-1] = '4321'이 된다 !
그리고 cnt==0일경우를 생각해줘야하고
i가1일경우 continue 를 써주지 않다면 1을 입력했을때 2가 아닌 1이 출력이 된다.
math내장 함수 sqrt로 제곱근을 반환한다.
다음 포스트에 소수알고리즘을 간단히 소개하겠다.