 restart;maple_mode(1);cas_setup(0,0,0,1,0,1e-10,10,[1,50,0,25],0,0,0); #radians,pas de cmplx, pas de  Sqrt
 rem(x^2+2*x+2,x^2+1);
 rem([1,2,2],[1,0,1]);
 rem(X^2+2*X+2,X^2+1); #X ne marche pas, il le fait en x. On pourra utiliser: ,X
 rem(X^2+2*X+2,X^2+1,X); #X ne marche pas, il le fait en x. On pourra utiliser: ,X
 P:=X^6-1;Q:=2*X^3+5;
 Factor(P) mod 7;
 Quo(P,Q,X) mod 7;
 Gcd(P,Q) mod 7;#Attention pas besoin de preciser la variable car c'est multivariable.
 Gcd(P,Q,X) mod 7;#ici ca fait le PGCD des 3 poly P,Q,X.
 pari():;#On charge pari pour cr\'eer des objets modulaires avec Mod
 P:=normal((X^6-1)*Mod(1,7));#mieux vaut multiplier pour basculer tous les coeffs
 factor(P);
 quo(P,2*X^3+5,X);
P:=X^6-1;Q1:=2*X^3+Mod(5,7);Q2:=Q1*Mod(1,7);
quo(P,Q1,X);# PB: le 2 est reste dans Z. 
quo(P,Q2,X);
gcd(P,Q2);
/* ------------Exo factorisation sans facteurs carres---------------------------------------------------*/
purge(a,b,c,d,e);
 P:=a*b^2*c^3*d^4*e^6;
Q:=a*b*d; #Q est P divise par le pgcd de P et P'
T1:=P;V1:=Q;
V2:=gcd(T1,V1);T2:=normal(T1/V2);
V3:=gcd(T2,V2);T3:=normal(T2/V3);normal(V2/V3); #on obtient a
V4:=gcd(T3,V3);T4:=normal(T3/V4);normal(V3/V4); #on obtient b
V5:=gcd(T4,V4);T5:=normal(T4/V5);normal(V4/V5); #on obtient d
/* On a obtenu le polynome T5=c^3e^6. Ce polynome en n'est autre queŁQ(x^3) ou Q=c.e^2. On recommence alors avec Q. (On obtient  c.eŁen divisant Q par le pgcd de Q et Q').*/
T6:=c*e^2;V6:=c*e;
V7:=gcd(T6,V6);T7:=normal(T6/V7);
V8:=gcd(T7,V7);T8:=normal(T7/V8);normal(V7/V8); #on obtient c
V9:=gcd(T8,V8);normal(V8/V9); #on obtient e
facto1:=proc(P,p)
local VV,T,V,k,L;
T:=Gcd(P,diff(P,x)) mod p;
V:=Quo(P,T) mod p; #Attention, il faut faire les divisions modp
V:=Gcd(P,V) mod p;T:=Quo(P,V) mod p; 
L:=[];
k:=1;
while degree(V) > 0 do
VV:=V;V:=Gcd(T,V) mod p; T:=Quo(T,V) mod p;
if degree(V)<degree(VV) then L:=[op(L),[Quo(VV,V) mod p,k]]; fi;
k:=k+1;
od;
L;
end;
 Factor(x^49-x) mod 7; #On cherche des facteurs irred de degre 2 distincts pour connaitre la reponse.
 P:=normal((x+1)*(x^2-2*x+1)^2*(x+2)^3*(x^2+3*x-2)^3*x^7*(x^2-x-3)^7*(x^2-x-1)^9*(x^2-2*x-2)^14) mod 7;
 Factor(P) mod 7; #On verifie que nos facteurs sont bien premiers entre eux.
facto1(P,7);
facto2:=proc(P,p)
local VV,T,V,k,L,j;
T:=Gcd(P,diff(P,x)) mod p;
V:=Quo(P,T) mod p; #Attention, il faut faire les divisions modp
T:=Quo(P,V) mod p; 
L:=[];
k:=1;j:=1
while degree(T)>0 do
while degree(V) > 0 do
VV:=V;V:=Gcd(T,V) mod p; T:=Quo(T,V) mod p;
if degree(V)<degree(VV) then L:=[op(L),[Quo(VV,V) mod p,k]]; fi;
k:=k+j;
od;
//Attention pour poly2symb les coeffs sont dans l'ordre des degres decroissants
j:=j*p;k:=j;T:=poly2symb([seq(coeff(T,i*p),i=degree(T)/p..1)],x);
V:=Quo(T,Gcd(T,diff(T,x)) mod p) mod p;
T:=Quo(T,V) mod p;
od;
L;
end;
facto2(P,7);
