多项式不可约性的错误评估

问题描述

在我的函数 PolynomialIrreducibility() 中,我正在评估输入的多项式是否不可约超过 GF(prime_number)

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;      
    }
}

在使用不可约多项式 x^2 + x + 2 测试实现的函数时,所有三个函数(DetIrredTest、ProbIrredTest、IterIrredTest)用于确定多项式是否不可约或不评估它是否是不可约的,即使它不是不可约的 GF(3 ) 如下所示。

Enter prime number: 3
Enter n: 2
Enter polynom: [2 1 1]
-> Reducible polynomial

请问,我是否以错误的方式评估了不可约性,还是我做错了什么?

解决方法

aschepler 评论了一个问题,GF(p) 中 n 次不可约多项式在 GF(p^n) 中不可约。它将有 n 个根。我建议进行此更改,以便 DetIrredTest() 在 GF(p) 中运行:

    BuildIrred(polynom,1);     // build irreducible poly of degree 1

我在 GF(3) 中发现了三个不可约多项式,它们可以用作 GF(9) 的约简多项式:

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)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...