Skip to content

foggyeclipse/FiniteFields

Repository files navigation

Библиотека для работы с конечными полями

Конечное поле, или поле Галуа в общей алгебре — поле, которое содержит конечное число элементов. Как и в любом поле, конечное поле — это множество, на котором определены операции сложения, вычитания, умножения и деления и удовлетворяют основным правилам арифметики, известным как аксиомы поля.

Множество F с введенными на нем алгебраическими опперациями сложения $+$ и умножения $*$ называется полем $⟨F, +, * ⟩,$ если выполнены следующие аксиомы:

  1. Коммутативность сложения: ∀ $a, b ∈ F$ $a + b = b + a$
  2. Ассоциативность сложения: ∀ $a, b, c ∈ F$ $(a + b) + c = a + (b + c)$
  3. Существование нулевого элемента: ∃ $0$ ∈ F : ∀ $a ∈ F$ $a + 0 = a$
  4. Существование противоположного элемента: ∀ $a ∈ F$$(-a) ∈ F : a + (-a) = 0$
  5. Коммутативность умножения: ∀ $a, b ∈ F$ $a * b = b * a$
  6. Ассоциативность умножения: ∀ $a, b, c ∈ F$ $(a * b) * c = a * (b * c)$
  7. Существование единичного элемента: ∃ $e ∈ F$ \ { $0$ } : ∀ $a ∈ F$ $a * e = a$
  8. Существование обратного элемента для ненулевых элементов: (∀ $a ∈ F$ : $a$$0$) ∃ $a^{-1} ∈ F : a * a^{-1} = e$
  9. Дистрибутивность умножения относительно сложения: ∀ $a, b, c ∈ F$ $(a + b) * c = (a * c) + (b * c)$

Представленная библиотека разработана для работы с программными проектами, которые предполагают использование элементов конечных полей. Рассматриваемые поля имеют вид $F_{p^n} \simeq F_p[X]/(q),$ где
$p$ — характеристика поля, простое число,
$n$ — степень,
$q$ — неприводимый многочлен над полем.

1.1 Создания поля

int characteristic = 2;
int degree = 2;

FiniteField GF4 = new FiniteField (characteristic, degree, new int[] { 1, 1, 1 }); 

1.2 Методы поля

Получение нулевого элемента

GF4.GetZero();

Получение единичного элемента

GF4.GetOne();

2.1 Создание элемента поля

var GF4 = new FiniteField(2,2,new int[]{1,1,1});
FiniteFieldElements element1 = new FiniteFieldElements(new int[] {2, 1}, GF4);

2.2 Операции над элементами поля

Сложение

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;

About

No description, website, or topics provided.

Resources

License

Stars

1 star

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages