polymul static method

Poly polymul(
  1. Poly a,
  2. Poly b
)

Implementation

static Poly polymul(Poly a, Poly b) {
  var c = List<int>.filled(n, 0);
  for (var i = 0; i < n; i++) {
    for (var j = 0; j < n; j++) {
      var kidx = (i + j) % n;
      var prod = a.coeffs[i] * b.coeffs[j];
      var sign = (i + j < n) ? 1 : -1;
      c[kidx] = (c[kidx] + sign * prod) % q;
      if (c[kidx] < 0) c[kidx] += q;
    }
  }
  return Poly(c);
}