有限体上の既約多項式一覧

有限体(ガロア体)上で乗法演算を行う際には、既約多項式が必要となる。既約多項式は、指定された次数において、より小さな次数の多項式の積として因数分解できないものである。

以下に、いくつかの代表的な既約多項式を示す。これらの多項式は GF(2) 上で定義されており、係数はすべて 0 または 1 である。多項式は通常、ビットパターンとして 16 進数で表現されることが多い。例えば、0x13 は多項式 \( x^4 + x + 1 \) を表す。

多項式の可視化には、次のような C++ クラスが利用できる:

#include <iostream>
using namespace std;
using LL = long long;

class Polynomial {
public:
    LL coeff;

    Polynomial(LL c) : coeff(c) {}

    friend ostream& operator<<(ostream& os, const Polynomial& p);
};

ostream& operator<<(ostream& os, const Polynomial& p) {
    if (p.coeff == 0) {
        return os << "0";
    }

    bool first = true;
    LL val = p.coeff;
    for (int deg = 0; val != 0; ++deg, val >>= 1) {
        if (val & 1) {
            if (!first) os << "+";
            first = false;
            if (deg == 0)
                os << "1";
            else if (deg == 1)
                os << "x";
            else
                os << "x^" << deg;
        }
    }
    return os;
}

このクラスにより、整数値(例:0x1D)を多項式形式(例:\( x^4 + x^3 + x^2 + 1 \))として出力できる。

以下は、GF(2) 上での低次の既約多項式の一覧(16進数表記)である:

次数 既約多項式(16進) 多項式表現
20x7\(x^2 + x + 1\)
30xB\(x^3 + x + 1\)
30xD\(x^3 + x^2 + 1\)
40x13\(x^4 + x + 1\)
40x19\(x^4 + x^3 + 1\)
50x25\(x^5 + x^2 + 1\)
60x43\(x^6 + x + 1\)
70x83\(x^7 + x + 1\)
80x11D\(x^8 + x^4 + x^3 + x^2 + 1\)

上記の表は、実用的によく使われる範囲をカバーしている。より高次の既約多項式は、計算量が増大するため、専用のアルゴリズムやソフトウェア(例:SageMath、Magma、MATLAB の Communications Toolbox)を用いて生成することが推奨される。

タグ: 有限体 既約多項式 GF(2) 多項式表現 C++

7月22日 20:01 投稿