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)