문제 링크
- http://icpc.me/15888
문제 출처
-
- 제2회 천하제일 코딩대회 예선 D번
사용 알고리즘
- 근의 공식
시간복잡도
- 상수 시간
풀이
이수근
인지 판별하기 위하여 2^k꼴의 숫자를 미리 구해놓읍시다.
방정식은 ax2 + bx + c = 0 꼴로 구성이 되고, 이 식은 x2 + (b/a)x + (c/a) = 0과 동치입니다.
방정식이 정수해를 갖기 위해서는 (b/a)와 (c/a) 모두 정수여야 합니다. 그러므로 b%a != 0
이거나 c%a != 0
이면 둘다틀렸근
을 출력해줍니다.
판별식이 0 이하인 경우에도 둘다틀렸근
을 출력해줍니다.
위에서 언급한 경우를 제외하면 가능한 경우는 이수근
혹은 정수근
뿐입니다.
근과 계수의 관계와 미리 구해놓은 2^k꼴의 수를 이용해 이수근
인지 판별해봅시다.
2^k꼴인 두 수 x, y에 대해 합이 -(b/a)이고, 곱이 (c/a)인 경우가 있다면 이수근
입니다.
반대의 경우에는 정수근
입니다.
전체 코드
1 |
|