【C++】和と積がどちらもNに等しい2つの数を見つける方法
はじめに
このチュートリアルでは、和(合計)と積がどちらもNに等しい2つの数を見つけるC++プログラムについて解説します。
具体的には、ある整数値Nが与えられたとき、その2つの数の和と積がそれぞれ与えられた値Nと一致するような、別の2つの数を求めるのが課題です。
数学的な背景
求めたい2つの数を a と b とすると、以下の連立方程式が成り立ちます。
- a + b = N
- a × b = N
この条件から二次方程式 x² − Nx + N = 0 が導かれ、解の公式を用いることで次のように表せます。
a = (N + √(N² − 4N)) / 2
b = (N − √(N² − 4N)) / 2
なお、判別式 N² − 4N が負になる場合(0 < N < 4 のとき)は実数解が存在しないため、その場合は「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
コードの解説
calculateTwoValues 関数では、まず判別式となる N * N - 4.0 * N を計算し、その値が負であれば実数解が存在しないため「NO」を出力して終了します。
判別式が0以上の場合は、sqrt 関数を使って平方根を求め、解の公式に従って a と b を算出します。例として N = 57 を入力した場合、A ≈ 55.9818、B ≈ 1.01819 という結果が得られ、この2つの数の和も積も57となることが確認できます。
-
【C++】合計と最大公約数(GCD)が与えられた2つの数を求める方法
この記事では、2つの数 a と b の合計(sum)と最大公約数(GCD)が与えられたときに、元の2つの数を復元する方法を解説します。条件を満たす組み合わせが存在しない場合は -1 を返します。 例えば、合計が 6、GCDが 2 とすると、答えは 4 と 2 になります(4 + 2 = 6、gcd(4, 2) = 2 を満たすため)。 考え方(アプローチ) GCDが分かっているということは、2つの数がどちらもGCDの倍数であることが確定します。この性質を利用すると、次の手順で答えを導き出せます。 候補の生成: 片方の数をGCDそのものと仮定すると、もう片方は「合計 − GCD」となります。
-
和と積がどちらもNに等しくなる2つの数を求めるC++プログラム
この記事では、a + b = N かつ a × b = N を同時に満たすような2つの数「a」と「b」を見つけるプログラムの作成方法について解説します。 a + b = N および a × b = N 数学的なアプローチ まず、この問題は代数を使って整理できます。2つの式から「a」を消去すると、「b」と「N」に関する二次方程式が得られます。 b2 − bN + N = 0 この二次方程式には2つの解(根)があり、それぞれが「a」と「b」の値に対応します。解の公式(判別式を利用する方法)を用いて解を求めると、aとbは次のように表されます。 $a= (N-\sqrt{N*N-4N)}/2\\ b=