{
  a=[0,0*x,O(5^3),2,2+O(5^3),x];
  for(i=1,#a,
    for(j=1,#a,
      print(gcdext(a[i],a[j]))));
}
gcdext(-1/3*x - 5/9,-x - 5/3)
z;T;
FF=Mod((O(2^4)*T^3+O(2^4)*T^2+O(2^4)*T+O(2^4))*z^7+((2+2^3+O(2^4))*T^3+O(2^4)*T^2+(1+2+O(2^4))*T+(1+2^2+O(2^4)))*z^6+(O(2^4)*T^3+O(2^4)*T^2+O(2^4)*T+O(2^4))*z^5+((1+2+2^3+O(2^4))*T^3+(1+2+2^2+2^3+O(2^4))*T^2+(2+2^3+O(2^4))*T+(1+2^2+2^3+O(2^4)))*z^4+(O(2^4)*T^3+O(2^4)*T^2+O(2^4)*T+O(2^4))*z^3+((2+2^2+2^3+O(2^4))*T^3+(1+2^2+2^3+O(2^4))*T^2+O(2^4)*T+(1+2+2^2+2^3+O(2^4)))*z^2+(O(2^4)*T^3+O(2^4)*T^2+O(2^4)*T+O(2^4))*z+((1+2^3+O(2^4))+(1+2^2+2^3+O(2^4))*T+(2+2^2+2^3+O(2^4))*T^2+(1+2+2^3+O(2^4))*T^3+O(T^20)),(1+O(2^4))*z^8+(1+O(2^4)));
GG=Mod((O(2^4)*T^3+O(2^4)*T^2+O(2^4)*T+O(2^4))*z^7+((2+2^3+O(2^4))*T^3+O(2^4)*T^2+(1+2+O(2^4))*T+(1+2^2+O(2^4)))*z^6+(O(2^4)*T^3+O(2^4)*T^2+O(2^4)*T+O(2^4))*z^5+((1+2+2^3+O(2^4))*T^3+(1+2+2^2+2^3+O(2^4))*T^2+(2+2^3+O(2^4))*T+(1+2^2+2^3+O(2^4)))*z^4+(O(2^4)*T^3+O(2^4)*T^2+O(2^4)*T+O(2^4))*z^3+((2+2^2+2^3+O(2^4))*T^3+(1+2^2+2^3+O(2^4))*T^2+O(2^4)*T+(1+2+2^2+2^3+O(2^4)))*z^2+(O(2^4)*T^3+O(2^4)*T^2+O(2^4)*T+O(2^4))*z+((1+2^3+O(2^4))+(1+2^2+2^3+O(2^4))*T+(2+2^2+2^3+O(2^4))*T^2+(1+2+2^3+O(2^4))*T^3+O(T^20)),(1+O(2^4))*z^8+(1+O(2^4)));
AA=truncate(lift(lift(FF)));
BB=truncate(lift(lift(GG)));
gcdext(AA,BB)
gcd(x*Mod(1,7),x*Mod(1,7))
a=ffgen([3,5],'a);
gcd((x^2+a*x+1)*(x+a),(x^3+a*x^2+a*x)*(x+a))
gcdext(x^2+a*x+1,x^3+a*x^2+a*x)

\\ #2159
a='a;
[P,Q,T]=[392757252698671644518933194646259026606358825037832605168120733455355904*x+(-32732367347867845727545221115691651450464375408154119*a^11-349901420764144182157149001212224917120789154588440854*a^10+301995817880565744755588538031580678248706119440652965202*a^9+2646578456426559099577038984579531585894051381563732492448*a^8-2145753607489079692256122053078728286338795227860524853856887*a^7-13811446641298285300218299011371917505796100901450244445692338*a^6+5693688219591330427165368038355599886351744436714343758769292516*a^5+26056823738974452070461793291997279246768552686129616910795970032*a^4-11017829044510831595466283417995196913182686859426697723597490195648*a^3-41423109488051504169006424755508272063137897706691923745421860003200*a^2-14256642019682515742570563716442803419996115605538672924160897393965312*a-126109974024633409447895964809596877746839040357983165563808547232812032),111803742489188645831681663344180674994365922928166912*x^3-83852806866891484373761247508135506245774442196125184*x^2+(12348904879976881337869569556155*a^11-250445894940842285432364650173775907*a^10-2597516391857725347876152069556695050*a^9+2738853504244544132425234560706042154874*a^8+22688857129426122093804816885398083679847*a^7-21762177549107842299693349522678564962736119*a^6-127665214054781454991155578265860141009689416*a^5+88461561911307031312255843171859939298925544784*a^4+346348882088725906358361823977571887641905346880*a^3-325654100038602077230986044994819766302283514425536*a^2-716001103348426243506424449886291672834136360965632*a+276988391939950578803619869121391914842756565190680576)*x+(12348904879976881337869569556155*a^11-250445894940842285432364650173775907*a^10-2597516391857725347876152069556695050*a^9+2738853504244544132425234560706042154874*a^8+22688857129426122093804816885398083679847*a^7-21762177549107842299693349522678564962736119*a^6-127665214054781454991155578265860141009689416*a^5+88461561911307031312255843171859939298925544784*a^4+346348882088725906358361823977571887641905346880*a^3-325654100038602077230986044994819766302283514425536*a^2-716001103348426243506424449886291672834136360965632*a+612399619407516516298664859153933939825854333975181312),a^12+12*a^11-13002*a^10-130740*a^9+105793425*a^8+832682592*a^7-500807817792*a^6-2934008282880*a^5+1667712407121792*a^4+6980361555806208*a^3-3225774176703664128*a^2-7116861358234533888*a+3895041509102090981376];gcd(P*Mod(1,T),Q*Mod(1,T))

gcd(2*I, 1+I)
gcd(I*1., I+1.)
gcd(1+O(2),1+O(3))
gcd(2+O(2^2),4+O(2^3))
w=quadgen(5);
gcd(w,2*w)
gcd(2*w,w)
gcd(2,Mod(2,4))
gcd(1/2,Mod(2,4))
gcd(1/3,Mod(2,4))
gcd(Mod(2,4), 2+O(2^3))
gcd(Mod(2,5), I)
gcd(Mod(2,5), w)
gcd(1/2, 1/(I+1))
gcd(1/2, 2+O(2^3))
gcd(I, 2+O(2^3))
gcd(I, w)
gcd(w, 2+O(2^3))
t = Mod(x^2,x^3);
gcd(t,y)
gcd(t,x)
gcd(t,1/y)
gcd(t,1/x)
gcd(t,1/(x+1))
gcd(Pol(0), y)
gcd(x+O(x^5), x^2+O(x^3))
gcd(x+O(x^5), 1/x^2)
v=[1,2,1.,Mod(1,2),1/2,1/3,2/3,I,quadgen(5), 1+O(2),2+O(2^2),1/2+O(2)];
{
t1=ffgen(2^3);
t0=0*t1;
t2=ffgen(3^3);
for (i=1,#v,
  print(iferr(gcd(t0,v[i]),E,E));
  print(iferr(gcd(t1,v[i]),E,E));
  print(iferr(gcd(t2,v[i]),E,E));
)
}
gcd(0,1.+I)
gcd(0,1+I)
gcd(0,Mod(1,3)+I)
gcd(1/2, 1.+I)
gcd(1,Mod(2,13)/(13*y+1))

gcd(4*x,2*x^0)
gcd(4*x,2*x+1)
gcd((4*x+2)*(x+1),4*x*(x+1))
gcd(x-1,(x-1)/x)

default(realprecision,38);
gcd(Pol(0.),x)
(k+1.)/k - (2*k+1.)/k
gcd(1/(2^64*y),Mod(x^2,2^64*x^3))

gcd(Mod(1,2)*x+Mod(1,2),Mod(0,2))
gcd(Mod(1,2)*x+Mod(1,2), 0*ffgen(2^3))

lcm(Pol(0),0)
lcm(0,Mod(0,3))

V=factorback(primes([2^63,2^63+1000]))
gcd((x+1+V)*(x^3+3*x+1),(x+1)*(x^3+x+1))
gcd((x+1)*(x^3+3*x+1),(x+1)*(x^3+x+1)+V)

chkhalfgcd(a,b)=
{
  my([M,V]=halfgcd(a,b));
  if (M*[a,b]~!=V, error([a,b]));
  [M,V];
}

chkhalfgcd(858824,528747)
chkhalfgcd(4*x^5+4*x^4+4*x^3+4*x^2+2*x+3,3*x^4+x^3+2)
chkhalfgcd((4*x^5+4*x^4+4*x^3+4*x^2+2*x+3)*Mod(1,5),(3*x^4+x^3+2)*Mod(1,5))
a=ffgen([5,5],'a);
chkhalfgcd(4*x^5+4*a*x^4+4*x^3+4*(a+1)*x^2+2*x+3,3*a*x^4+x^3+2*(a+1))
b=Mod(a.pol,a.mod);
chkhalfgcd(4*x^5+4*b*x^4+4*x^3+4*(b+1)*x^2+2*x+3,3*b*x^4+x^3+2*(b+1))
p=nextprime(2^128);
chkhalfgcd((4*x^5+4*x^4+4*x^3+4*x^2+2*x+2^64+1)*Mod(1,p),(3*x^4+x^3+2^96)*Mod(1,p))
