88import static io .polypen .Util .isAbsoluteOne ;
99
1010public final class Polynomial {
11+
12+ public static final Polynomial ZERO = new Polynomial (List .of (Fraction .ZERO ));
13+
1114 private final List <Fraction > coefficients ;
1215
1316 Polynomial (List <Fraction > coefficients ) {
@@ -18,16 +21,33 @@ public static Polynomial parse(String s) {
1821 return new Polynomial (Parser .parse (s ));
1922 }
2023
21- public Polynomial add (String s ) {
22- List <Fraction > other = Parser .parse (s );
23- int rank = Math .max (coefficients .size (), other .size ());
24- List <Fraction > r = new ArrayList <>(rank );
25- for (int i = 0 ; i < rank ; i ++) {
26- r .add (coefficient (i ).add (i < other .size () ? other .get (i ) : Fraction .ZERO ));
24+ public Polynomial add (Polynomial other ) {
25+ int degree = Math .max (degree (), other .degree ());
26+ List <Fraction > r = new ArrayList <>(degree + 1 );
27+ for (int i = 0 ; i <= degree ; i ++) {
28+ r .add (coefficient (i ).add (other .coefficient (i )));
2729 }
2830 return new Polynomial (r );
2931 }
3032
33+ public Polynomial add (String s ) {
34+ return add (parse (s ));
35+ }
36+
37+ public Polynomial multiply (Polynomial other ) {
38+ Polynomial result = ZERO ;
39+ for (int i = 0 ; i <= degree (); i ++) {
40+ Monomial m = monomial (i );
41+ Polynomial p = m .multiply (other );
42+ result = result .add (p );
43+ }
44+ return result ;
45+ }
46+
47+ public Polynomial multiply (String s ) {
48+ return multiply (parse (s ));
49+ }
50+
3151 @ Override
3252 public String toString () {
3353 List <String > result = new ArrayList <>(coefficients .size ());
@@ -72,6 +92,13 @@ public Fraction coefficient(int i) {
7292 return coefficients .get (i );
7393 }
7494
95+ public Monomial monomial (int i ) {
96+ if (i >= coefficients .size ()) {
97+ return Monomial .ZERO ;
98+ }
99+ return new Monomial (coefficients .get (i ), i );
100+ }
101+
75102 public int degree () {
76103 return coefficients .size () - 1 ;
77104 }
0 commit comments