Быстрые операции над многочленами ч.1. (6 февраля 2025)

  1. Задачи на производящие функции
    1. 3-SUM за O(SlogS)
    2. Счастливые билеты
    3. n! за O(n1/2) ⇒ факторизация за n1/4
    4. Рюкзак за O(SlogS + n) (затравка)

  2. Операции с многочленами через разделяйку
    1. Перевод из одной системы в другую
    2. Деление
    3. Multipoint Evaluation
    4. Any points Interpolation

  3. За сколько вообще можно умножать многочлены?
    1. Над F2: bitset
    2. Над кольцом: Карацуба
    3. Над F2: спарим bitset и Карацубу

  4. Вспоминаем FFT
    1. Общая схема: FFT(A), FFT(B), умножить поточечно, FFT-1
    2. Комплексные корни из единицы: картинка, группа, умножения и степени
    3. Рекурсивное FFT: идея + реализация
    4. Задача на понимания 1: считаем 2n − nlogn или nlog2n?
− Перерыв −
  1. Более подробный план того, что выше:

  2. n! mod m и факторизация целых чисел
    1. k = floor(sqrt(n)), рассмотрим P(x) = x(x+k)(x+2k)...(x+k(k-1))
    2. P(1)P(2)P(3)...P(k) = (k2)!, чтобы дополнить до n!, сделаем руками O(k) умножений, время работы: O(n1/2log2n)
    3. Посчитать P(x) мы можем через разделяй и властвуй за O(klog2k)
    4. Умножение нужно теперь делать не в C, а по модулю m. Умножим в Z (то же, что R, что C), в конце возьмём по модулю m.
    5. Факторизация. min d: gcd(d!, n) != 1 - минимальный делитель n. Можно бинпоиском, можно "двоичными подъёмами" за O(n1/4log2n)

  3. Разделяй и властвуй для интерполяции
    1. Ньютон: (x1...xn-1, y1...yn-1) → P(x) → P(x) + Q(x)/Q(xn)*(yn - P(xn)), где Q(x) = (x-x1)(x-x2)...(x-xn-1)
    2. Разделяй и властвуй: (x1...xn/2, y1...yn/2) → P(x) → P(x) + Q(x)*S(x), (x-x1)(x-x2)...(x-xn/2), а
      значения S(x) в точках xn/2+1...xn вычисляются как S(xi) = (yi - P(xi)) / Q(xi)

  4. Где почитать? Лекция от sankowski