DEV//UNIT

Миллер-Рабин: проверка простоты

Свидетели составности отсеивают за O(k·log³ n).

время O(k · log³ n)память O(1)уровень: средний
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1function isPrime(n: number, bases = [2, 3, 5, 7]): boolean {
2 if (n < 2) return false
3 for (const b of bases) {
4 if (n === b) return true
5 if (n % b === 0) return false
6 }
7
8 // n − 1 = 2^s · d
9 let d = n - 1, s = 0
10 while (d % 2 === 0) { d /= 2; s++ }
11
12 for (const a of bases) {
13 let x = power(a, d, n) // a^d mod n
14 if (x === 1 || x === n - 1) continue
15 let ok = false
16 for (let i = 0; i < s - 1; i++) {
17 x = (x * x) % n
18 if (x === n - 1) { ok = true; break }
19 }
20 if (!ok) return false // свидетель составности
21 }
22 return true
23}

Проблема

Свидетели составности отсеивают за O(k·log³ n).

Что вы видите

n−1 = 2^s·d; если a^d не даёт ±1 и цепочка квадратов не доходит до n−1 — составное.

Как это работает

Вероятностный тест: каждый свидетели ловит ≥3/4 составных. Для n < 3.3M базы 2,3,5,7 дают детерминизм. RSA генерирует простые так.

Пошаговый разбор

  1. 01

    Разложение

    n−1 = 2^s · d.

  2. 02

    База

    a^d mod n.

  3. 03

    Цепочка

    Квадраты до n−1?

Complexity и ограничения

time
O(k · log³ n)
space
O(1)

Сложность см. в шапке страницы.

Edge cases

  • Пустой вход

    Корректная тривиальная обработка.

  • Вырожденный случай

    Минимум работы — сразу ответ.

Где встречается в реальности

RSA

Генерация ключей.

Криптография

Тесты простоты повсюду.

Хеш-таблицы

Простые размеры.

Связанные алгоритмы

Shorts

«RSA: как рождаются простые»

Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.

Shorts 9:16

Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.

RSA: как рождаются простые
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/miller-rabin