pstopia Notes for Problem Solving Contest

[Easy] MagicCandy

Topcoder SRM 526.5 Div1

Problem

완전제곱수를 전부 지우는 프로세스를 한번 할 때 원래 구간 ( p*p, (p+1)*(p+1) ] 에서는 수가 최대 한개밖에 지워지지 않는다는 것을 관찰할 수 있다. 지워지는 순서도 정해져있는데 p*p + p + 1 이 제일 나중에 지워지고, p*p + 1 이 그 바로 전에 지워진다. 왜 이렇게 되는지 간략하게 설명하면 구간 ( p*p, (p+1)*(p+1) ] 에 있는 수는 0 < k < p 인 k가 있을 때 p*p + p + k 꼴 혹은 p*p + k 꼴 이다. 완전제곱수를 전부 지우는 프로세스를 한번 하면, 이 수들은 전부 p만큼 줄어든다. p*p + p + k -> p*p + k p*p + k -> p*p - p + k = (p-1)*(p-1) + (p-1) + k 수가 줄어드는 과정에서도 계속 p*p + p + k 꼴 혹은 p*p + k 꼴을 유지하게 된다. 그러다가 p == k 가 되면 그 수가 지워지게 된다. 결국 k = 1 인 꼴의 수들이 제일 나중에 지워진다는 것을 알 수 있다. p*p < n 이면서 제일 큰 p를 찾고 p*p + p + 1 <= n 이면 이것이 답 아니면 p*p + 1 이 답이 된다.