【问题标题】:Incorrect evaluation of the irreducibility of the polynomial多项式不可约性的错误评估
【发布时间】:2021-05-16 21:06:28
【问题描述】:

在我的函数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

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

【问题讨论】:

  • conv 是做什么的?
  • @1201ProgramAlarm 它是converting ZZ_pX 到 ZZ_pEX,因为在程序的后面我需要这种形式进行分解。您可以验证input_polynom 而不进行转换,结果将是相同的。
  • x^2+x+1 在 GF(3) 上不可约,但在 GF(9) 上可约。这不是你得到的结果吗?
  • 我更新了我的答案,在 GF(3) 中加入了不可约多项式的例子。

标签: c++ polynomials polynomial-math ntl finite-field


【解决方案1】:

正如 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)

【讨论】:

  • 使用 NTL 库 [2 1 1] 表示 2 + x + x^2
猜你喜欢
  • 2013-05-31
  • 1970-01-01
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
  • 2014-02-08
  • 2016-05-21
  • 2019-10-22
相关资源
最近更新 更多