public static Polinomio operator -(Polinomio n, Polinomio d) { BigInteger[] coeff = d.Coefficienti.ToList().Select(c => - c).ToArray(); Polinomio p = new Polinomio(coeff); return(n + p); }
public static Polinomio operator *(Polinomio n, Polinomio d) { Polinomio risultato = new Polinomio(n.Grado + d.Grado); for (int i = n.Grado; i >= 0; i--) { for (int j = d.Grado; j >= 0; j--) { risultato[i + j] += n[i] * d[j]; } } return(risultato); }
public static Polinomio operator %(Polinomio n, Polinomio d) { Polinomio risultato = new Polinomio(n.Grado - d.Grado); Polinomio a = new Polinomio(n.Coefficienti); Polinomio m = null; for (int i = risultato.Grado; i >= 0; i--) { risultato[i] = a[a.Grado] / d[d.Grado]; Polinomio temp = new Polinomio(i); temp[i] = risultato[i]; m = d * temp; a = a - m; } return(a); }
public static Polinomio operator +(Polinomio n, Polinomio d) { Polinomio max = null; Polinomio min = null; if (n.Grado > d.Grado) { max = new Polinomio(n.Coefficienti); min = new Polinomio(d.Coefficienti); } else { max = new Polinomio(d.Coefficienti); min = new Polinomio(n.Coefficienti); } List <BigInteger> coeff = Enumerable.Repeat <BigInteger>(0, max.Grado - min.Grado).ToList(); coeff.AddRange(min.Coefficienti.ToList()); BigInteger[] coeffRisultato = coeff.Zip(max.Coefficienti, (a, b) => a + b).ToArray(); return(new Polinomio(coeffRisultato)); }