Простые числа (18 сентября 2013)
- Факторизация числа за O(N1/4) ро-эвристикой Полларда
- Пародокс дней рождений: нужно Θ(√ N ) случайных чисел, чтобы пояилось совпадений
- xi = (xi-12+3) mod N − случайная последовательность
- Предпериод и период − Θ(√ N )
- Пусть N = pq, p ≤ q, p = O(√ N )
- yi = xi mod p − тоже случайная последовательность, период и предпериод длины Θ(√ P ) = O(N1/4)
- Алгоритм
- k = 5N1/4 + 10
- x0 = RANDOM, for i=1..k do xi = (xi-12+3) mod N
- for i=1..k do check(gcd(N, xk - xi))
- Чтобы найти все делители, при нахождении одного нужно сделать рекурсивный вызов
- Умножение по модулю 1018
- Первый способ за O(logN) операций − выразить через сложение
- Второй способ за O(1) операций через long double
- Решето Эратосфена
- Задача: найти все простые числа от 1 до N
- Факты: чисел от 1 до N примерно N/lnN, k-е простое примерно равно k*lnk
- Алгоритм (A) за O(NloglogN) [код]
- Док-во времени работы: loglogN = Sumk=1..N/logN(1/klogk)
- Алгоритм (B) за O(N) [код]
- Док-во времени работы: для каждого a, min_prime[a] будет присвоено ровно один раз
- Алгоритм (C) с использованием за O(√ N ) памяти [код]
- Упражения на дом
- Сколько работает точно алгоритм C в теме "решето Эратосфена"?