Факторизация (22-е мая 2019)
- Из прошлого
- Паросочетания
- VEα − хранить p[] только для остовного дерева bfs
- dfs позволяет искать LCA(v, u) за O(1) − это будет или base[v], или base[u]
- Двойственная задача
- Матричные игры
- Детерминированные стратегии. Вероятностные стратегии.
- Оптимальная вероятностная стратегия: mini(∑aijxj) → max
- Записываем задачу через LP для первого и второго игроков. Проверяем, что задача второго двойственна задаче первого.
- ♥ Теорема Нэша для матричных игр (сильная теорема двойственности для уже записанных задач LP)
- Метод Крайчика
- Тест ферма: u2 - v2 = 0, u2 - v2 ≡ 0 (mod n)
- xi = floor(sqrt(n)) + i, yi = xi2 - n
- Алгоритм: найти z = ∏yij, являющееся точным квадратом, и скормить тесту Ферма ∏xij2 и z.
- Число точный квадрат ⇔ в разложении все степени чётны, выберем b-гладкие yi, факторизуем, полученные битовые вектора скормим Гауссу.
- Псевдокод: фиксируем число простых k (b = primek), перебираем yi, b-гладкие скармливаем инкрементальному Гауссу с вероятностью 1/2 до первой линейной зависимости.
- Оптимизации
- Гаусс → Гаусс для разреженных матриц или даже Видеман
- Факторизация b-гладких yi → для каждого из простых решили квадратное уравнение (квадратичное решето)
- Итоговое время работы O*(k2 + m), где (*) − loglog-и.
- Итоговое время алгоритма: при k↑ m↓, выбираем k2 = m, получаем esqrt(lognloglogn) = L(1/2, 1)
- Решения лучше: L(1/3, (32/9)1/3) даёт SNFS (Special number field sieve)