C++ 精确大有限域线性代数库(例如GF(2^128)/GF(2^256)) 一般的
我正在寻找一个能够对大型有限域(如GF(2128)/进行精确计算的库。NTL库似乎可以工作,使用这个(抱歉,我无法用C++编程)代码C++ 精确大有限域线性代数库(例如GF(2^128)/GF(2^256)) 一般的,c++,math,linear-algebra,computer-algebra-systems,finite-field,C++,Math,Linear Algebra,Computer Algebra Systems,Finite Field,我正在寻找一个能够对大型有限域(如GF(2128)/进行精确计算的库。NTL库似乎可以工作,使用这个(抱歉,我无法用C++编程)代码 甚至反转似乎也能起作用(在上面的输出示例中尽可能向右滚动):-)您看过SAGE()了吗?我相信它确实有这样的功能。它有一个Python接口,它(可以说是比C++更令人愉快):@ QNN恼人的乘法逆似乎增加了有限域的无需多个数。虽然我们可以自己实现扩展的gcd算法。@cmh你是说逆_mod()的东西吗?你刚才看了吗?那里有一个C++库的链接,但我不知道它是质量还是效
甚至反转似乎也能起作用(在上面的输出示例中尽可能向右滚动):-)您看过SAGE()了吗?我相信它确实有这样的功能。它有一个Python接口,它(可以说是比C++更令人愉快):@ QNN恼人的乘法逆似乎增加了有限域的无需多个数。虽然我们可以自己实现扩展的gcd算法。@cmh你是说逆_mod()的东西吗?你刚才看了吗?那里有一个C++库的链接,但我不知道它是质量还是效率。
#include <NTL/GF2E.h>
#include <NTL/GF2EX.h>
#include <NTL/GF2X.h>
#include <NTL/GF2XFactoring.h>
NTL_CLIENT
int main()
{
GF2X P = BuildIrred_GF2X(256);
GF2E::init(P);
GF2E zero = GF2E::zero();
GF2E one;
GF2E r = random_GF2E();
GF2E r2 = random_GF2E();
conv(one, 1L);
cout << "Cardinality: " << GF2E::cardinality() << endl;
cout << "ZERO: " << zero << " --> " << IsZero(zero) << endl;
cout << "ONE: " << one << " --> " << IsOne(one) << endl;
cout << "1/r: " << 1/r << ", r * (1/r): " << (r * (1/r)) << endl;
cout << "1/r2: " << 1/r2 << ", r2 * (1/r2): " << (r2 * (1/r2)) << endl;
}
Cardinality: 115792089237316195423570985008687907853269984665640564039457584007913129639936
ZERO: [] --> 1
ONE: [1] --> 1
1/r: [0 1 0 1 1 0 1 1 1 0 1 1 1 0 0 1 1 0 1 1 1 0 1 1 0 0 0 0 0 1 0 1 0 1 1 0 1 1 0 0 0 0 0 0 1 1 1 0 1 1 1 0 1 0 1 0 0 0 1 1 1 0 1 1 1 1 0 1 0 1 0 1 1 0 1 1 1 0 0 0 1 0 0 1 0 1 1 1 0 1 1 0 1 1 0 0 0 0 0 1 1 0 1 0 1 0 0 0 0 0 1 0 0 1 1 0 0 1 0 0 1 0 1 1 1 1 0 0 1 1 0 1 0 1 1 1 1 1 1 0 1 1 0 0 0 0 0 1 1 0 1 0 0 1 1 1 0 1 1 1 1 1 0 1 0 1 0 0 0 1 1 0 0 1 1 0 0 1 0 1 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 0 1 0 0 0 0 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 0 1 0 1 0 0 1 1 0 1 1 0 1 1 1 1 1 0 0 1 1 0 1 0 1 0 0 0 0 1 1 0 0 1 1 1 0 1], r * (1/r): [1]
1/r2: [1 0 1 1 0 0 0 0 1 0 1 0 0 0 1 0 0 0 1 1 0 0 1 0 1 0 0 0 1 1 1 0 0 0 1 1 1 1 1 0 1 0 1 1 0 0 1 1 1 0 1 0 1 0 0 1 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 0 0 1 0 0 0 1 1 0 1 0 1 1 1 0 0 1 0 1 0 1 0 0 1 0 0 0 1 0 0 1 1 1 1 1 0 0 0 0 1 1 1 0 1 0 1 0 1 0 0 0 1 0 1 0 1 1 0 0 0 1 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 1 1 1 0 1 1 0 0 0 0 1 1 0 1 1 1 0 1 0 0 0 0 0 1 1 0 1 1 1 0 0 0 0 1 1 0 1 0 0 0 0 1 0 0 0 0 1 1 1 1 1 0 1 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 1 0 1 1 1 0 1 0 0 0 0 1 0 1 1 0 0 0 1 1 0 0 1 1 0 1 0 0 1 0 1 0 0 1 1], r2 * (1/r2): [1]