refactor: Change gcd implementation to attempt faster calc

This commit is contained in:
Alivecow 2024-11-28 17:45:10 +01:00
parent f7f3c44acb
commit 270abdb7b7
2 changed files with 22 additions and 10 deletions

View file

@ -576,9 +576,21 @@ pub fn gcd(a: &Polynomial, b: &Polynomial) -> Polynomial {
if a.is_zero() { if a.is_zero() {
return b.clone(); return b.clone();
} }
if b.is_zero() {
return a.clone();
}
let monic_b = b.div(&a).1.monic(); if a.degree() > b.degree() {
return gcd(&monic_b, a); return gcd(b, a);
}
let (_, remainder) = b.div(a);
if remainder.is_zero() {
return a.clone().monic();
}
gcd(&remainder, a)
} }
pub fn non_monic_gcd(a: &Polynomial, b: &Polynomial) -> Polynomial { pub fn non_monic_gcd(a: &Polynomial, b: &Polynomial) -> Polynomial {

View file

@ -1,18 +1,18 @@
{ {
"testcases": { "testcases": {
"sandbox": { "sandbox": {
"action": "gfpoly_factor_ddf", "action": "gfpoly_factor_edf",
"arguments": { "arguments": {
"F": [ "F": [
"tpkgAAAAAAAAAAAAAAAAAA==", "mmAAAAAAAAAAAAAAAAAAAA==",
"m6MQAAAAAAAAAAAAAAAAAA==", "AbAAAAAAAAAAAAAAAAAAAA==",
"8roAAAAAAAAAAAAAAAAAAA==", "zgAAAAAAAAAAAAAAAAAAAA==",
"3dUAAAAAAAAAAAAAAAAAAA==",
"FwAAAAAAAAAAAAAAAAAAAA==", "FwAAAAAAAAAAAAAAAAAAAA==",
"/kAAAAAAAAAAAAAAAAAAAA==", "AAAAAAAAAAAAAAAAAAAAAA==",
"a4AAAAAAAAAAAAAAAAAAAA==", "wAAAAAAAAAAAAAAAAAAAAA==",
"gAAAAAAAAAAAAAAAAAAAAA==" "gAAAAAAAAAAAAAAAAAAAAA=="
] ],
"d": 3
} }
} }
} }