@@ -13,26 +13,18 @@ function ngcd(p::P, q::Q,
1313 kwargs... ) where {T,X,P<: StandardBasisPolynomial{T,X} ,
1414 S,Y,Q<: StandardBasisPolynomial{S,Y} }
1515
16+
1617 # easy cases
1718 degree (p) < 0 && return (u= q, v= p, w= one (q), θ= NaN , κ= NaN )
1819 degree (p) == 0 && return (u= one (q), v= p, w= q, θ= NaN , κ= NaN )
1920 degree (q) < 0 && return (u= one (q), v= p, w= zero (q), θ= NaN , κ= NaN )
2021 degree (q) == 0 && return (u= one (p), v= p, w= q, Θ= NaN , κ= NaN )
2122
23+
2224 if (degree (q) > degree (p))
2325 u,w,v,Θ,κ = ngcd (q,p,args... ; kwargs... )
2426 return (u= u,v= v,w= w, Θ= Θ, κ= κ)
2527 end
26- if degree (p) > 5 * (1 + degree (q))
27- a,b = divrem (p,q)
28- return ngcd (q, b, args... ; λ= 100 , kwargs... )
29- end
30-
31- # other easy cases
32- p ≈ q && return (u= p,v= one (p), w= one (p), θ= NaN , κ= NaN )
33- Polynomials. assert_same_variable (p,q)
34-
35-
3628
3729 R = promote_type (float (T))
3830 𝑷 = Polynomials. constructorof (P){R,X}
@@ -45,14 +37,28 @@ function ngcd(p::P, q::Q,
4537 if nz == length (qs)
4638 x = variable (p)
4739 u = x^ (nz- 1 )
48- v,w = 𝑷 (ps[nz: end ]), 𝑷 (qs[nz: end ])
40+ ps,qs = ps[nz: end ], qs[nz: end ]
41+ v,w = 𝑷 (ps), 𝑷 (qs)
4942 return (u= u, v= v, w= w, Θ= NaN , κ= NaN )
43+ elseif 1 <= nz < length (qs)
44+ ps,qs = ps[nz: end ], qs[nz: end ]
45+ p,q = P (ps), Q (qs)
46+ end
47+
48+ if degree (p) > 5 * (1 + degree (q))
49+ a,b = divrem (p,q)
50+ return ngcd (q, b, args... ; λ= 100 , kwargs... )
5051 end
5152
53+ # other easy cases
54+ p ≈ q && return (u= p,v= one (p), w= one (p), θ= NaN , κ= NaN )
55+ Polynomials. assert_same_variable (p,q)
56+
5257 # # call ngcd
5358 P′ = PnPolynomial
54- p′ = P′ {R,X} (ps[nz: end ])
55- q′ = P′ {R,X} (qs[nz: end ])
59+ p′ = P′ {R,X} (ps)
60+ q′ = P′ {R,X} (qs)
61+
5662 out = NGCD. ngcd (p′, q′, args... ; kwargs... )
5763 # # convert to original polynomial type
5864 𝑷 = Polynomials. constructorof (P){R,X}
0 commit comments