BOJ 28242 - 수학 선생님의 고민(Hard)
일단 판별식을 갈겨서 이고 제곱수인지 확인한다.
그런다음 근의 공식을 쓰면 가 되는데,
그럼 가 가능한지에 대해 봐야한다.
그럼 와 가 정수가 되기위해 곱해져야 할 수를 각각 라고 하자.
이다.
이라면 답이 있고 그렇지 않다면 답이 없다.
답이 있다면 이제 을 적절히 분배하여 에 를 곱해주고 에 를 곱해주면 된다.
void solve() {
int n;
cin >> n;
int a = n, b = n + 1, c = -(n + 2);
int d = b * b - 4 * a * c;
if (d < 0) {
cout << -1;
return;
}
int dd = sqrt(d);
if (dd * dd != d) {
cout << -1;
return;
}
int p1 = -b + dd, q1 = -b - dd;
int g1 = gcd(p1, 2 * a), g2 = gcd(q1, 2 * a);
p1 /= g1, q1 /= g2;
int p2 = 2 * a / g1, q2 = 2 * a / g2;
if (n % (p2 * q2) != 0) {
cout << -1;
return;
}
int A = p2;
int B = -p1;
n /= p2;
int C = n;
int D = -q1 * n / q2;
cout << A << ' ' << B << ' ' << C << ' ' << D;
}
쉬운 풀이Permalink
여담으로 이 문제는 이 작아 개의 조합으로 를 결정해주고 풀 수 있다.
왜냐면 이고 이기 때문에 처럼 되기 때문이다.
에서
를 결정해준다면 가 된다.
이때, 의 부호가 다르게 되는 두 가지 경우를 검사해준다.
Comments