Конечное поле, или поле Галуа в общей алгебре — поле, которое содержит конечное число элементов. Как и в любом поле, конечное поле — это множество, на котором определены операции сложения, вычитания, умножения и деления и удовлетворяют основным правилам арифметики, известным как аксиомы поля.
Множество F с введенными на нем алгебраическими опперациями сложения
$+$ и умножения$*$ называется полем$⟨F, +, * ⟩,$ если выполнены следующие аксиомы:
- Коммутативность сложения: ∀
$a, b ∈ F$ $a + b = b + a$ - Ассоциативность сложения: ∀
$a, b, c ∈ F$ $(a + b) + c = a + (b + c)$ - Существование нулевого элемента: ∃
$0$ ∈ F : ∀$a ∈ F$ $a + 0 = a$ - Существование противоположного элемента: ∀
$a ∈ F$ ∃$(-a) ∈ F : a + (-a) = 0$ - Коммутативность умножения: ∀
$a, b ∈ F$ $a * b = b * a$ - Ассоциативность умножения: ∀
$a, b, c ∈ F$ $(a * b) * c = a * (b * c)$ - Существование единичного элемента: ∃
$e ∈ F$ \ {$0$ } : ∀$a ∈ F$ $a * e = a$ - Существование обратного элемента для ненулевых элементов: (∀
$a ∈ F$ :$a$ ≠$0$ ) ∃$a^{-1} ∈ F : a * a^{-1} = e$ - Дистрибутивность умножения относительно сложения: ∀
$a, b, c ∈ F$ $(a + b) * c = (a * c) + (b * c)$
Представленная библиотека разработана для работы с программными проектами, которые предполагают использование элементов конечных полей. Рассматриваемые поля имеют вид
int characteristic = 2;
int degree = 2;
FiniteField GF4 = new FiniteField (characteristic, degree, new int[] { 1, 1, 1 }); GF4.GetZero();GF4.GetOne();var GF4 = new FiniteField(2,2,new int[]{1,1,1});
FiniteFieldElements element1 = new FiniteFieldElements(new int[] {2, 1}, GF4);FiniteFieldElements element2 = new FiniteFieldElements(new int[] {1, 1}, GF4);
var elementSum = element1 + element2;FiniteFieldElements element2 = new FiniteFieldElements(new int[] {1, 1}, GF4);
var elementSubtract = element1 - element2;FiniteFieldElements element2 = new FiniteFieldElements(new int[] {1, 1}, GF4);
var elementMultiplication = element1 * element2;FiniteFieldElements element2 = new FiniteFieldElements(new int[] {1, 1}, GF4);
var elementDivide = element1 / element2;var elementReverseAddition = (-element1);var elementReverse = (~element1);var n = 2;
var elementPower = element1 ^ n;