"Проблема: Эффективно вычислить произведение двух многочленов.
Решение:
import numpy
from numpy.fft import fft, ifft
def poly_mul(p1, p2):
"""Умножение двух многочленов. p1 и p2 - массивы коэффициентов в порядке возрастания степени."""
deg1 = p1.shape[0] - 1
deg2 = p1.shape[0] - 1
# Было бы 2*(deg1 + deg2) + 1, но следующий степень двойки обрабатывает +1
total_num_pts = 2 * (deg1 + deg2)
next_power_of_2 = 1 << (total_num_pts - 1).bit_length()
jeremykun.com
Polynomial Multiplication Using the FFT
