이 튜토리얼에서는 합과 곱이 모두 N과 같은 두 숫자, 즉 x + y = n이면서 동시에 x × y = n을 만족하는 두 수를 찾는 프로그램을 작성해 보겠습니다. 모든 n에 대해 이러한 숫자가 존재하는 것은 아니며, 조건을 만족하는 수가 없을 때는 None을 출력하도록 하겠습니다. 그럼 바로 시작해 보겠습니다.
수학적 접근 방법
주어진 두 값은 각각 이차방정식의 두 근의 '합'과 '곱'에 해당합니다. 근과 계수의 관계에 따라 우리가 찾고자 하는 두 수 x, y는 다음 이차방정식의 해가 됩니다.
t2 − nt + n = 0
이 방정식의 판별식은 n2 − 4n입니다. 판별식이 음수, 즉 n2 − 4n < 0이면 실근이 존재하지 않으므로 조건을 만족하는 두 수를 구할 수 없습니다. 반대로 판별식이 0 이상이라면 두 수는 근의 공식을 통해 다음과 같이 계산됩니다.
(n + √(n2 − 4n)) / 2 와 (n − √(n2 − 4n)) / 2
예제 코드
전체 코드는 다음과 같습니다.
#include <bits/stdc++.h>
using namespace std;
void findTwoNumbersWithSameSumAndProduct(double n) {
double discriminant = n * n - 4.0 * n;
// 실근이 존재하지 않는 경우 확인
if (discriminant < 0) {
cout << "None";
return;
}
// x와 y 출력
cout << (n + sqrt(discriminant)) / 2.0 << endl;
cout << (n - sqrt(discriminant)) / 2.0 << endl;
}
int main() {
double n = 50;
findTwoNumbersWithSameSumAndProduct(n);
return 0;
}
실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
48.9792 1.02084
결과 검증
출력된 두 수가 조건을 만족하는지 직접 확인해 보겠습니다.
- 합: 48.9792 + 1.02084 = 50
- 곱: 48.9792 × 1.02084 ≈ 50
두 조건이 모두 만족되는 것을 알 수 있습니다.
마무리
이번 튜토리얼에서는 이차방정식의 근과 계수 관계를 활용해 합과 곱이 모두 N과 같은 두 수를 찾는 방법을 살펴보았습니다. 핵심은 판별식 n2 − 4n의 부호를 먼저 확인하여 실근의 존재 여부를 판단하는 것입니다. 튜토리얼에 대해 궁금한 점이 있다면 댓글로 남겨 주세요.