C++ 多项式不可约性的错误估计
在我的函数C++ 多项式不可约性的错误估计,c++,polynomials,polynomial-math,ntl,finite-field,C++,Polynomials,Polynomial Math,Ntl,Finite Field,在我的函数polynomalirreducibility()中,我正在计算输入的多项式是不可约的还是不超过GF(素数) void PolynomialIrreducibility () { // Enter prime number ZZ prime_number; ZZ_pX polynom; do { cout << "Enter prime number: "; cin >> p
polynomalirreducibility()
中,我正在计算输入的多项式是不可约的还是不超过GF(素数)
void PolynomialIrreducibility () {
// Enter prime number
ZZ prime_number;
ZZ_pX polynom;
do {
cout << "Enter prime number: ";
cin >> prime_number;
} while (!ProbPrime(prime_number));
ZZ_p::init(prime_number); // define GF(prime_number)
// Enter n
long n;
do {
cout << "Enter n: ";
cin >> n;
} while (n < 1);
BuildIrred(polynom, n); // generate an irreducible polynomial P of degree n over GF(prime_number)
ZZ_pE::init(polynom); // define GF(prime_number^n)
// Enter polynom
ZZ_pX input_polynom;
cout << "Enter polynom: ";
cin >> input_polynom;
ZZ_pEX convert_polynom;
conv(convert_polynom, input_polynom);
if (DetIrredTest(convert_polynom)) {
//if (ProbIrredTest(convert_polynom)) {
//if (IterIrredTest(convert_polynom) {
cout << "-> Irreducible polynomial" << endl;
}
else {
cout << "-> Reducible polynomial" << endl;
}
}
请问,我是以错误的方式评估不可约性,还是做了其他错误的事情?正如aschepler所评论的,GF(p)中n次不可约多项式在GF(p^n)中不是不可约的。它将有n个根。我建议进行此更改,以便DetiredTest()在GF(p)中运行:
我在GF(3)中发现了三个不可约多项式,它们可以用作GF(9)的约化多项式:
conv
做什么?@1201程序是ZZ_pX到ZZ_pEX,因为在程序的后面,我需要这个表格进行分解。您可以验证input_polynom
,无需转换,结果将是相同的。x^2+x+1在GF(3)上不可约,但在GF(9)上可约。这不是你得到的结果吗?我更新了答案,在GF(3)中加入了不可约多项式的例子。使用NTL库[2 1 1]表示2+x+x^2
Enter prime number: 3
Enter n: 2
Enter polynom: [2 1 1]
-> Reducible polynomial
BuildIrred(polynom, 1); // build irreducible poly of degree 1
x^2 + 1 irreducible (x + 1 is a primitive element)
x^2 + x + 2 primitive (x is a primitive element)
x^2 + 2 x + 2 primitive (x is a primitive element)