/* polynomial gcd.k */ class Pgcd extends Object { pzero = Poly("0"); def gcd0(f,g,xx) { local tmp,r; if (Degree(g,xx) > Degree(f,xx)) { tmp = f; f = g; g = tmp; } while (!IsConstant(g)) { r = Reduction(f,[g]); Println([f,g,r[1]]); r = r[0]; f = g; g = r; } if (g == pzero) return(f); else return(g); } def gcd(f,g,xx) { local tmp,r; if (Degree(g,xx) > Degree(f,xx)) { tmp = f; f = g; g = tmp; } while (!IsConstant(g)) { r = pseudoRemainder(f,g,xx); f = g; g = r; } if (g == pzero) return(f); else return(g); } def pseudoRemainder(f,g,xx) { local c,r; c = Init(g); Println([c,xx]); c = Coefficients(c,xx); c = c[1,0]; r = Reduction(c^(Degree(f,xx)-Degree(g,xx)+1)*f,[g]); Println([f,g,r[1]]); return(r[0]); } }