BOJ 6210 Wonderprime Brands

BOJ 6210 Wonderprime Brands

문제 링크:

문제 내용

양의 정수 NNDD가 주어질 때, NNDD자리 이상이면서 0으로 시작하지 않는 소수인 두 부분으로 나눌 수 있으면 NN을 원더프라임이라고 합니다.

NNDD가 주어질 때, NN 이상의 가장 작은 원더프라임을 구하세요.

입력

첫 번째 줄에 DDNN이 주어집니다. (1N2  000  000  0001 \le N \le 2\;000\;000\;000)

출력

문제의 정답을 출력합니다. 이 정답은 2  000  000  0002\;000\;000\;000을 초과하지 않습니다.

문제 풀이

스포일러

원하는 수의 왼쪽 길이를 ll로, 오른쪽 길이를 rr로 고정하고, NN의 오른쪽 rr자리를 끊어서 그 값을 NrN_r, 왼쪽의 나머지 부분의 값을 NlN_l이라고 합시다. 그러면 다음과 같은 문제가 됩니다.

  • 최소의 Pl×10r+PrP_l \times 10^r + P_r을 구합니다. 이 수는 Nl×10r+NrN_l \times 10^r + N_r 이상이면서, Pl10l1P_l \ge 10^{l-1}, Pr10r1P_r \ge 10^{r-1} (0으로 시작하지 않음)이고, PlP_lPrP_r은 각각 소수여야 합니다.

먼저, NlN_l10l110^{l-1} 이상의 소수인지 확인합니다. 그렇다면 NrN_r 이상이면서 10r110^{r-1} 이상인 가장 작은 소수를 확인합니다. 이 소수 pp10r10^r 미만이라면, Pl=Nl,Pr=pP_l = N_l, P_r = p가 답이 됩니다.

NlN_l이 조건을 충족하지 못했거나 p>10rp > 10^r이면, NlN_l을 초과하는 10l110^{l-1} 이상의 가장 작은 소수 q1q_1을 찾습니다. 그러면 PrP_r10r110^{r-1} 이상의 가장 작은 소수 q2q_2로 두면 Pl=q1,Pr=q2P_l = q_1, P_r = q_2가 답이 됩니다.

xx 이상의 가장 작은 소수 찾기는 O(x)\mathcal{O}(\sqrt{x}) 시간의 소수 판별을 이용하여 나이브하게 구현해도 충분히 빠르게 계산할 수 있습니다. 이는 소수들 사이의 최대 간격이 크지 않음을 이용합니다.

Last updated on