2015-01-15 9 views
0

Я пытаюсь найти библиотеку C++, которая обрабатывает полиномы над некоторым конечным полем GF (2^n) и поддерживает матричное представление с поддержкой поиска ранга/обратного или даже решения A = X * B. Я пытаюсь использовать Linbox, но документации очень мало. Что я смог сделать, чтобы преобразовать целое число в полиномиальное представление, сделав некоторые неприятные вещи с частью библиотеки Givaro, но я не мог использовать часть Rank/solve Linbox, поскольку они, похоже, не обрабатывают полиномы, только простые базисы с показателем одного (GF (2)).Полиномиальная библиотека конечных полей

Вот часть из кода

LinBox::GivaroGfq GF28(2, 8); 
typedef LinBox::BlasMatrix<LinBox::GivaroGfq> Matrix; 
Matrix mat(GF28); 
//...Resize to MxM and insert M^2 elements 
unsigned long int r; 
rank(r, mat); 

При отладке, функция rank всегда обрабатывает элементы в качестве элементов над GF (2) и возвращать неверные значения.

Любые идеи о том, как использовать эту библиотеку в этом отношении? Имеют ли матрицу MxM элементов GF (2^n) и инвертируют ее или получают ее ранг или решают линейные уравнения? Или я должен использовать другую библиотеку?

+0

Я быстро просмотрел документацию LinBox. Похоже, что часть библиотеки Givaro предназначена для обработки полей по модулю простого числа или по модулю простого числа для некоторой мощности, GF28, по-видимому, является математическим модулем 256 вместо поля Galios. Для поля Galios, состоящего из 8-битных чисел, должен быть указан девятибитный многочлен, основанный на определенном поле, и я не вижу, где это указано в документации LinBox. – rcgldr

+0

Продолжая, кажется, что библиотека LinBox может быть использована для модуля операций 929 типа Рида Соломона (простое число), но не для полей Galios, где есть два слоя. Первый уровень - это 1 бит чисел по модулю 2, второй слой в этом случае - 8-битные полиномы по модулю 9-битного полинома. Затем есть третий слой с использованием полиномов, которые используют 8-битные полиномы как коэффициенты, но этот третий слой не является частью поля или кольца. – rcgldr

+0

Существует ли какая-то библиотека LinBox, позволяющая вам указывать основные операции над числами, такие как add (xor), subtract (xor), умножать (умножать 8-битные полиномы по модулю 9-битного полинома, используя таблицу журналов или таблицу поиска 65k) и разделите (снова используя журнал или таблицу поиска)? – rcgldr

ответ

0

Похоже, что NTL - это решение. Это дает удобную реализацию полиномов GF (2^n) по модулю некоторой многочленной и простой работы с матрицами (обратное, решение и т. Д.)