Игры, теория чисел (5 мая 2016)
- Игры
- Def: симметричная игра на графе
- Выигрышность и проигрышность позиций (L → W; W → L)
- Случай ацикличного графа: динамика за O(V+E)
- Случай цикличного графа: ретроанализ за O(V+E)
- Прямая сумма игр (декартово произведение графов). Решение за O((V+E)k)
- Функция Гранди, определение и построение за O(V+E), Lm: проигрышность ⇔ grundi(v) = 0. Решение прямой суммы ацикличных игр без док-ва.
− Перерыв −
- Базовая теория чисел
- Остатки по модулю простого p − поле. Умеем складывать, вычитать, умножать, делить.
- {a : (a, m) = 1} − группа по умножению. Умеем умножать, делить.
- Возведение в степень за логарифм, умножение через сложение за логарифм.
- Линейные диофантовы уравнения. Решение.
- Переполнения. Lm без док-ва: коэффициенты по ходу расширенного Евклида по модулю строго меньше исходных чисел.
- Код расширенного алгоритма Евклида.
- Деление и обращение по модулю простого и составного числа через алгоритма Евклида.
- Деление и обращение по модулю простого и составного числа через теорему Эйлера.
- Обращение всех чисел от 1 до k за O(k):
inv[i] = -inv[p%i] * (p/i)
- RSA
- Simple XOR cipher (шифр Вернама, одноразовый). Симметричное кодирование, общий ключ.
- Концепция "открытый ключ, закрытый ключ".
- Схема кодирования и декодирования: n = pq, ed ≡ 1(φ(n)), m → me → (me)d ≡ m(n)
- Факторизация ⇔ φ(n) → взлом RSA
- Практика: коды длины k = 2048 бит → длинная арифметика
- Время кодирования/декодирования: O(k3). Simple XOR cipher: O(k).
- Первообразный корень
- Def: {g0, g1, ..., gp-2} = {1, 2, ..., p-1}
- Рандомизированный алгоритм поиска: return random [1,p-1]
- Вероятность успеха равна φ(p-1) / (p-1) ≥ 1 / lnln p
- Как проверить? Перебрать все простые делители p-1.
- Пусть есть задача, решение которой требует первообразный корень и работает за A(n), а проверить корректность ответа можем за B(n),
тогда мы получили вероятностный алгоритм за O(lnlnn)*(A(n)+B(n))