BOJ 26601 - 가장 작은 수

image.png

약수가 2N2^N개를 가진다는 의미는 다음과 같다.

정수의 소인수분해 꼴이 n=p1k1p2k2prkrn=p_1^{k_1}p_2^{k_2} \cdots p_r^{k_r} 라고할 때,

τ(n)=i=1r(ki+1)\tau(n)=\displaystyle \prod_{i=1}^{r}(k_i+1) 이다.

이것이 22의 거듭제곱 꼴이여야 하므로 kik_i 로 가능한 값은 1,3,7,15,1,3,7,15,\dots 임을 알 수 있다.

따라서 대략 111,222111,222 까지 나오는 소수들의 위의 거듭제곱 값들 중 NN이 모두 채워질 때 까지 작은것을 골라주면 된다.

구현은 우선순위큐로 했는데, 예를 들어 처음에 212^1 을 넣는다면, 이제 다음에 222^2 를 우선순위 큐에 추가해두는 것이다.

또한 222^2 도 넣었다면 이제 242^4 를 넣어주면 된다.

하나 넣을 때 마다 2k2^k 에서 kk11씩 증가하므로 이걸 NN번 가장 작은것들을 골라서 넣어주기만 하면 된다.

Tags:

Categories:

Updated:

Comments