diff --git a/src/utils/poly.rs b/src/utils/poly.rs index ac2b756..f42f1c5 100644 --- a/src/utils/poly.rs +++ b/src/utils/poly.rs @@ -575,9 +575,21 @@ pub fn gcd(a: &Polynomial, b: &Polynomial) -> Polynomial { if a.is_zero() { return b.clone(); } + if b.is_zero() { + return a.clone(); + } - let monic_b = b.div(&a).1.monic(); - return gcd(&monic_b, a); + if a.degree() > b.degree() { + 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 { diff --git a/test_json/sandbox.json b/test_json/sandbox.json index d0a0f3c..836b3c8 100644 --- a/test_json/sandbox.json +++ b/test_json/sandbox.json @@ -1,18 +1,18 @@ { "testcases": { "sandbox": { - "action": "gfpoly_factor_ddf", + "action": "gfpoly_factor_edf", "arguments": { "F": [ - "tpkgAAAAAAAAAAAAAAAAAA==", - "m6MQAAAAAAAAAAAAAAAAAA==", - "8roAAAAAAAAAAAAAAAAAAA==", - "3dUAAAAAAAAAAAAAAAAAAA==", + "mmAAAAAAAAAAAAAAAAAAAA==", + "AbAAAAAAAAAAAAAAAAAAAA==", + "zgAAAAAAAAAAAAAAAAAAAA==", "FwAAAAAAAAAAAAAAAAAAAA==", - "/kAAAAAAAAAAAAAAAAAAAA==", - "a4AAAAAAAAAAAAAAAAAAAA==", + "AAAAAAAAAAAAAAAAAAAAAA==", + "wAAAAAAAAAAAAAAAAAAAAA==", "gAAAAAAAAAAAAAAAAAAAAA==" - ] + ], + "d": 3 } } }