아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

조니와 이차방정식

시간 제한1초메모리 제한512 MB

요약
2^32을 법으로 하는 이차 합동식 ax^2+bx+c=0이 해를 갖는지 판정한다.
난이도

어려움10점 중 8점

유형
정수론, 수학, 비트 연산
정답자
아직 제출이 없습니다

문제

조니는 이제 막 이차방정식을 배웠다. 열정 넘치는 프로그래머인 그는 숙제에 도움이 될 것 같아 곧바로 다음 프로그램을 작성했다.

#include<cstdio>
int main() {
    unsigned int a,b,c,x=0;
    scanf("%u %u %u",&a,&b,&c);
    do {
        if (a*x*x+b*x+c==0) {
            puts("YES");
            return 0;
        }
        x++;
    } while(x);
    puts("NO");
    return 0;
}

모든 계산은 부호 없는 32비트 정수로, 즉 2322^{32}으로 나눈 나머지 위에서 이루어진다. 이 프로그램은 xx를 00부터 부호 없는 32비트 정수 전체에 대해 차례로 시도하면서 a⋅x2+b⋅x+c≡0(mod232)a \cdot x^2 + b \cdot x + c \equiv 0 \pmod{2^{32}}를 만족하는 xx를 찾는 즉시 YES를 출력하고, 그런 xx가 하나도 없으면 NO를 출력한다. 하지만 이 완전 탐색 방식은 최신 게임용 컴퓨터에서도 너무 느리다. 같은 출력을 빠르게 만들어 낼 수 있을까?

입력

첫째 줄에 테스트 케이스의 개수를 나타내는 정수 tt (t≤104t \le 10^4)가 주어진다. 이어지는 tt개의 줄에는 각각 공백으로 구분된 세 정수 aa, bb, cc (0≤a,b,c<2320 \le a, b, c < 2^{32})가 주어진다.

출력

각 테스트 케이스마다 a⋅x2+b⋅x+c≡0(mod232)a \cdot x^2 + b \cdot x + c \equiv 0 \pmod{2^{32}}를 만족하는 부호 없는 32비트 정수 xx가 존재하면 YES를, 존재하지 않으면 NO를 입력에 주어진 순서대로 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    3
    948 43958 1429912782
    95348 54988 345335
    943428 4353958 3444096692
    
    예상 출력
    YES
    NO
    YES