【发布时间】: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