refactor: Change gcd implementation to attempt faster calc
This commit is contained in:
parent
f7f3c44acb
commit
270abdb7b7
2 changed files with 22 additions and 10 deletions
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue