[Medium] CorrectMultiplication
Topcoder SRM 522 Div1
완성해야 할 식 A*B=C 를 살펴보자. (A <= B 라고 하자. 일반성을 잃지 않는다.)
c-A < C < c+A 를 만족해야 유리함을 알 수 있다.
C가 c-A 이하가 되거나 c+A 이상이 되려고 하면 그냥 B의 값을 조절하는게 더 싸게 먹히기 때문이다.
A*A <= A*B = C < c+A -> A*A < c+A -> A^2 - A - c < 0
따라서 A < (1+sqrt(1+4c))/2 <= 31623.2766...
그래서 A를 1부터 저 제한까지 다 돌려보면서 확인할 수 있다.
A가 결정됐으면 B는 어떻게 구할까?
c-A < C < c+A -> c/A-1 < C/A < c/A+1 -> c/A-1 < B < c/A+1
따라서 floor(c/A) , floor(c/A)+1 이 두가지가 B가 될 수 있다. 둘 다 확인해보면 된다.