29 using Field =
typename Logic::Field;
31 using EltW =
typename Logic::EltW;
34 explicit Polynomial(
const Logic& l) : l_(l) {}
36 void powers_of_x(
size_t n, EltW xi[],
const EltW& x)
const {
45 for (
size_t k = 2; k < n; ++k) {
46 xi[k] = L.mul(&xi[k - k / 2], xi[k / 2]);
57 std::array<EltW, N> xi;
58 powers_of_x(N, xi.data(), x);
62 for (
size_t i = 0; i < N; ++i) {
63 auto cxi = L.mul(coef[i], xi[i]);
74 std::array<EltW, N> c;
75 for (
size_t i = 0; i < N; ++i) {
76 c[i] = L.konst(coef[i]);
79 for (
size_t n = N; n > 1; n = ceildiv<size_t>(n, 2)) {
80 for (
size_t i = 0; 2 * i < n; ++i) {
83 auto cxi = L.mul(&x, c[2 * i + 1]);
84 c[i] = L.add(&c[i], cxi);