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

四次方程式の根の和と積の絶対差を求める方法

この記事では、四次方程式における「根の和」と「根の積」の絶対差を求める方法について解説します。

四次方程式と解と係数の関係

四次方程式は一般に次のような形で表されます。

𝑎𝑥4+𝑏𝑥3+𝑐𝑥2+𝑑𝑥+𝑒=0

方程式を実際に解いて根を求め、その後で和と積を計算する方法もありますが、四次方程式の求解は複雑で時間がかかるため、あまり効率的とは言えません。

そこで役立つのが「解と係数の関係(ヴィエタの定理)」です。これを使えば、方程式を解かずとも根の和と積は係数から直接求められます。

  • 根の和 = −𝑏∕𝑎
  • 根の積 = 𝑒∕𝑎

したがって、求めるべき値は次の式だけで表せます。

∣−𝑏∕𝑎 − 𝑒∕𝑎∣

なお、この計算には係数 𝑐 と 𝑑 は不要である点に注目してください。必要なのは 𝑎・𝑏・𝑒 の3つだけです。

アルゴリズム

rootSumProdDiff(a, b, c, d, e)

begin
    sum := -b/a
    prod := e/a
    return |sum - prod|
end

C++による実装例

#include<iostream>
#include<cmath>
using namespace std;
double rootSumProdDiff(double a, double b, double c, double d, double e){
    double sum = double(-b/a);  // 根の和
    double prod = double(e/a);  // 根の積
    return abs(sum - prod);
}
main() {
    double a,b,c,d,e;
    cout << "Enter a, b, c, d, e for equation ax^4 + bx^3 + cx^2 + dx + e:";
    cin >> a >> b >> c >> d >> e;
    cout << "Difference between sum and product of roots are: " << rootSumProdDiff(a, b, c, d, e);
}

実行結果

Enter a, b, c, d, e for equation ax^4 + bx^3 + cx^2 + dx + e:8 4 6 4 1
Difference between sum and product of roots are: 0.625

計算の検証

入力例 𝑎=8、𝑏=4、𝑒=1 の場合を手計算で確認してみましょう。

  • 根の和 = −4∕8 = −0.5
  • 根の積 = 1∕8 = 0.125

絶対差は ∣−0.5 − 0.125∣ = ∣−0.625∣ = 0.625 となり、プログラムの出力と一致します。

まとめ

四次方程式の根の和と積の絶対差は、ヴィエタの定理を利用すれば O(1) の定数時間で求められます。方程式を解く必要がなく、実装も非常にシンプルなので、競技プログラミングや数値計算の場面でも有用なテクニックです。

  1. C構造体とC++構造体の違いとは?主な相違点を比較表でわかりやすく解説

    はじめに:CとC++の構造体は何が違うのか C言語とC++では、どちらも「構造体(struct)」というデータ構造を利用できますが、その仕様や使える機能には大きな違いがあります。特にC++の構造体はクラスとよく似た性質を持っており、メンバ関数やアクセス指定子など、オブジェクト指向的な機能を利用できる点が特徴です。 本記事では、Cの構造体とC++の構造体の主な違いを、比較表とあわせてひとつずつわかりやすく解説します。 C構造体とC++構造体の比較一覧 Cの構造体C++の構造体 構造体内にメンバ関数を定義できないメンバ変数と一緒にメンバ関数を定義できる 構造体のメンバを宣言時に直接初期化

  2. C++で積と和の差が指定値DとなるN個の整数を見つける方法

    問題の概要2つの整数NとDが与えられたとき、それらの合計と積の差がちょうどDと等しくなるような、N個の整数の集合を見つける必要があります。例えば、N=3、D=5の場合、答えは「1, 2, 8」です。このとき合計は 1 + 2 + 8 = 11、積は 1 × 2 × 8 = 16 となり、16と11の差はちょうど5(= D)になります。解法のアプローチ:巧妙な構成テクニックこの問題を効率的に解くには、次のような構成を利用します。N−2個の「1」1つの「2」残りの1つとして「N + D」この構成を採用すると、合計・積・差はそれぞれ以下のように計算できます。合計 = (N − 2) × 1 + 2