BOJ 28141 - Easy Interactive Problem

image.png

10001000 보다 큰 소수들을 각 소수끼리의 차이가 1000보다 크게 나열해보자.

이를 pip_i 라 한다.

현재 방문되지 않은 수가 ii 라면

x=i,k=pjx=i,k=p_j 로 쿼리를 물어본다.

소수는 210002 \sim 1000 까지의 수로 나누어 떨어지지 않기 때문에 결과가 ii가 나온다면 길이 11의 싸이클임을 알 수 있다.

그렇지 않다면 처음 쿼리 결과가 나올 때 까지 pj+1,pj+2,p_j+1,p_j+2, \cdots 처럼 쿼리를 날려준다.

최악의 경우 22개씩 묶인 싸이클이 N/2N/2 개 존재하여 3N/2\left\lfloor 3N/2 \right\rfloor 번 쿼리를 날리게 된다.

이제 싸이클을 하나 찾았다면, ii가 싸이클에 있는 위치, pj % Cp_j ~ \% ~ \vert C \vert 의 offset 두 가지 요인을 고려하여 정답을 채워줄 수 있다.

Tags:

Categories:

Updated:

Comments