C++
 Computer >> コンピューター >  >> プログラミング >> C++

【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となることが確認できます。

  1. 【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」となります。

  2. 和と積がどちらも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=