C++での二つの多項式の除算


  1. 配列を使用した方法: 多項式は、係数の配列として表現することができます。例えば、次のような2つの多項式を考えます。

A(x) = a0 + a1x + a2x^2 + ... B(x) = b0 + b1x + b2x^2 + ...

配列を使用して多項式を表現する場合、A(x)とB(x)の係数を格納する2つの配列を用意します。そして、配列の要素ごとに対応する係数同士を除算し、商と余りを求めることができます。

以下に、この方法のコード例を示します。

#include <iostream>
#include <vector>
std::vector<int> dividePolynomials(const std::vector<int>& dividend, const std::vector<int>& divisor, std::vector<int>& remainder)
{
    std::vector<int> quotient;
    // dividendの次数をd、divisorの次数をd'とする
    int d = dividend.size() - 1;
    int d_prime = divisor.size() - 1;
    // dividendの次数がdivisorの次数以上になるまで繰り返す
    while (d >= d_prime)
    {
        // dividendの最高次の係数をdivisorの最高次の係数で割り、商を求める
        int q = dividend[d] / divisor[d_prime];
        quotient.push_back(q);
        // dividendからdivisor * qを引いて、次数を下げる
        for (int i = 0; i <= d_prime; i++)
        {
            dividend[d - i] -= divisor[d_prime - i] * q;
        }
// dividendの次数を更新する
        d--;
    }
// 余りをremainderに格納する
    remainder = dividend;
    return quotient;
}
int main()
{
    std::vector<int> dividend = {4, 0, -3, 2};  // A(x) = 4 - 3x^2 + 2x^3
    std::vector<int> divisor = {2, 1};         // B(x) = 2 + x
    std::vector<int> remainder;
    std::vector<int> quotient = dividePolynomials(dividend, divisor, remainder);
    std::cout << "Quotient: ";
    for (int i = quotient.size() - 1; i >= 0; i--)
    {
        std::cout << quotient[i] << " ";
    }
    std::cout << "\nRemainder: ";
    for (int i = remainder.size() - 1; i >= 0; i--)
    {
        std::cout << remainder[i] << " ";
    }
    return 0;
}

上記のコードでは、dividePolynomials関数が二つの多項式を除算し、商をquotientに、余りをremainderに格納しています。main関数では、具体的な多項式の例を使って除算を実行し、結果を表示しています。

  1. ライブラリを使用した方法: C++には多くの数学ライブラリが存在し、多項式の除算に特化した関数やクラスを提供していることもあります。例えば、BoostライブラリやEigenライブラリなどが挙げられます。これらのライブラリを使用することで、多項式の除算を簡単に実装することができます。

以下に、Boostライブラリを使用した場合のコード例を示します。

#include <iostream>
#include <boost/math/polynomial.hpp>
int main()
{
    typedef boost::math::polynomial<double> Polynomial;
    Polynomial dividend = {4, 0, -3, 2};  // A(x) = 4 - 3x^2 + 2x^3
    Polynomial divisor = {2, 1};         // B(x) = 2 + x
    Polynomial quotient, remainder;
    boost::math::divide(dividend, divisor, quotient, remainder);
    std::cout << "Quotient: " << quotient << std::endl;
    std::cout << "Remainder: " << remainder << std::endl;
    return 0;
}

上記のコードでは、Boostライブラリのpolynomialクラスを使用して多項式を表現し、boost::math::divide関数を使って除算を実行しています。商はquotientに、余りはremainderに格納されます。

以上が、C++で二つの多項式を除算する方法とそれに対応するコード例です。他にもさまざまなアプローチやライブラリが存在するため、用途や要件に応じて適切な方法を選択することが重要です。