public Polynome Dérivée () { var poly = new Polynome (); for (int k = 1; k <= Degré; k++) { poly.AddCoefficient (k - 1, k * GetCoefficient (k)); } return poly; }
public static Polynome operator /(Polynome A, Polynome B) { var Q = new Polynome (); while (A.Degré >= B.Degré) { var C = new Polynome (); C.AddCoefficient ((A.Degré - B.Degré) * Convert.ToInt32(A.Degré >= B.Degré), A.GetCoefficient (A.Degré) / B.GetCoefficient (B.Degré)); A -= B * C; Q += C; } return Q; }
public static Polynome operator *(Polynome A, Polynome B) { var poly = new Polynome (); for (int k = 0; k <= A.Degré; k++) { for (int l = 0; l <= B.Degré; l++) { poly.AddCoefficient (k+l, A.GetCoefficient (k) * B.GetCoefficient (l)); } } return poly; }
public static Polynome operator -(Polynome A, Polynome B) { var poly = new Polynome (); for (int k = 0; k <= Math.Max(A.Degré, B.Degré); k++) { poly.AddCoefficient (k, A.GetCoefficient(k)-B.GetCoefficient(k)); } return poly; }
public static Polynome[] Bezout(Polynome A, Polynome B) { Polynome Uk = 1; Polynome Vk = 0; Polynome UkPlus1 = 0; Polynome VkPlus1 = 1; while (B != 0) { var Uk_save = Uk; var Vk_save = Vk; Uk = UkPlus1; Vk = VkPlus1; UkPlus1 = Uk_save - UkPlus1 * (A / B); VkPlus1 = Vk_save - VkPlus1 * (A / B); var X = B; B = A % B; A = X; } return new Polynome[] { Uk / A.GetCoefficient (A.Degré), Vk / A.GetCoefficient (A.Degré) }; }
public static Polynome[] Bezout (Polynome[] polynomes) { if (polynomes.Length == 1) return polynomes; var bezouts = new Polynome[polynomes.Length]; for (int i = 0; i < bezouts.Length; i++) { bezouts [i] = 1; } for (int k = 1; k <= polynomes.Length; k++) { var pgcd = polynomes [0]; for (int i = 1; i < polynomes.Length - k; i++) { pgcd = PGCD(pgcd, polynomes[i]); } var b = Bezout (pgcd, polynomes [polynomes.Length - k]); bezouts [bezouts.Length - k] *= b [1]; for (int l = 0; l < bezouts.Length-k; l++) { bezouts [l] *= b [0]; } } return bezouts; }
public static Polynome PGCD (Polynome[] polynomes) { var pgcd = polynomes [0]; for (int k = 1; k < polynomes.Length; k++) { pgcd = PGCD (polynomes [k], pgcd); } return pgcd; }
public static Polynome PGCD (Polynome A, Polynome B) { while (B != 0) { var X = B; B = A % B; A = X; } return A / A.GetCoefficient (A.Degré); }