code: function(p) {
              var l = this.coeffs.length;
              for(var i=0; i<l; i++) {
                  var c = this.coeffs[i];
                  if(c < 0) { //go borrow
                      var b; //a coefficient > 0
                      for(var j=i; j<l; j++) {//starting from where we left off
                          if(this.coeffs[j] > 0) {
                              b = this.coeffs[j];
                              break;
                          }
                      }
  
                      if(b) { //if such a coefficient exists
                          for(j; j>i; j--) { //go down the line and adjust using p
                              this.coeffs[j] = this.coeffs[j].subtract(new Frac(1));
                              this.coeffs[j-1] = this.coeffs[j-1].add(new Frac(p));
                          }
                          c = this.coeffs[i]; //reset c
                      }
                  }
  
                  var d = c.mod(p);
                  var w = c.subtract(d).divide(p);
                  if(!w.equals(0)) {
                      var up_one = i+1;
                      var next = this.coeffs[up_one] || new Frac(0);
                      next = next.add(w);
                      this.coeffs[up_one] = new Frac(next);
                      this.coeffs[i] = new Frac(d);
                  }
              }
  
              return this;
          }
docs: /*
  Returns polynomial mod p **currently fails**
  @param {Number} p
  @returns {Polynomial}