# Square-free factorization. f := expand((x^3+x+4)^2*(x+1)); f_prime := diff(f,x); print(`gcd(f,f_prime) is `, gcd(f,f_prime)); g := gcd(f,f_prime); print(`f1 is quo(f,g^2,x,'r') = `, quo(f,g^2,x,'r')); f1 := quo(f,g^2,x,'r'); print(`r is `, r); print(` g * g * f1 is `, g*g*f1); sort(expand(g*g*f1)); sort(f); print(`gcd(diff(g,x),g) is `, gcd(diff(g,x),g)); # This is 1, so g is square-free. print(`------`); f := expand((2*x+1)^14) mod 7; print(`diff(f,x) is `, diff(f,x)); print(` diff(f,x) mod 7 is`, diff(f,x) mod 7); print(`gcd(f,diff(f,x)mod 7) is `, gcd(f,diff(f,x)mod 7) ); f_7th_root := 4*x^2 + 4*x + 1; print(` expand(f_7th_root ^7) mod 7 is `, expand(f_7th_root ^7) mod 7); f_7 := f_7th_root; diff(f_7,x); " mod 7; print(` gcd(f_7,diff(f_7,x) mod 7,x) is`, gcd(f_7,diff(f_7,x) mod 7,x)); #print(`quo(f_7,g,x,'r') is `, # quo(f_7,g,x,'r') ); #print(` remainder r is `, r);