이 튜토리얼에서는 합과 곱이 모두 주어진 값 N과 같은 두 숫자를 찾는 프로그램을 다룹니다.
하나의 정수 값이 주어졌을 때, 두 수의 곱과 합이 모두 해당 값과 일치하는 두 개의 값을 찾는 것이 우리의 과제입니다.
문제 접근 방법
a + b = N이고 a × b = N을 만족하는 두 수 a와 b를 찾으려면 이차방정식을 활용하면 됩니다.
두 수를 근으로 갖는 이차방정식은 다음과 같은 형태가 됩니다.
x² − Nx + N = 0
근의 공식에 따라 두 값은 다음과 같이 계산됩니다.
x = (N ± √(N² − 4N)) / 2
여기서 판별식 D = N² − 4N이 음수가 되면 실수 범위에서 해가 존재하지 않으므로 "NO"를 출력하고 종료합니다.
예제 코드
#include <bits/stdc++.h>
using namespace std;
//a*b=N이고 a+b=N인
//두 값 a와 b를 찾는 함수
void calculateTwoValues(double N) {
double val = N * N - 4.0 * N;
if (val < 0) {
cout << "NO";
return;
}
double a = (N + sqrt(val)) / 2.0;
double b = (N - sqrt(val)) / 2.0;
cout << "Value of A:" << a << endl;
cout << "Value of B:" << b << endl;
}
int main() {
double N = 57.0;
calculateTwoValues(N);
return 0;
}
출력 결과
Value of A:55.9818
Value of B:1.01819
코드 설명
위 코드의 동작 과정을 단계별로 살펴보겠습니다.
1단계: 판별식 val = N² − 4N을 계산합니다. 이 값이 0보다 작으면 실수 해가 존재하지 않으므로 "NO"를 출력하고 함수를 종료합니다.
2단계: 판별식이 0 이상이라면 근의 공식을 사용해 두 값을 계산합니다. 큰 근은 (N + √val) / 2, 작은 근은 (N − √val) / 2로 구할 수 있습니다.
3단계: 계산된 두 값 a와 b를 출력합니다.
N = 57인 경우, 두 수의 합은 약 57(55.9818 + 1.01819 ≈ 57)이고 곱 역시 약 57이 되어 조건을 만족함을 확인할 수 있습니다.