Факториза́ция — разложение данного числа на простые множители.
В отличие от задачи распознавания простоты числа, факторизация предположительно является сложной задачей.
Алгоритмы факторизации
Наиболее тривиальным алгоритмом факторизации чисел является полный перебор возможных делителей. Сложность этого алгоритма равна . ρ-алгоритм Полларда имеет сложность . Метод непрерывных дробей, метод квадратичного решета и метод на основе эллиптических кривых имеют сложность .В настоящее время самым эффективным алгоритмом факторизации является метод решета числового поля со сложностью .
Вопрос о существовании алгоритма факторизации с полиномиальной сложностью на классическом компьютере является одной из важных открытых проблем современной теории чисел. В то же время, для родственной задачи о распознавании простоты числа существует полиномиальное решение - тест простоты AKS.
Решение задачи факторизации с полиномиальной сложностью возможно на квантовом компьютере с помощью алгоритма Шора.
Применение в криптографии
Предполагаемая сложность задачи факторизации лежит в основе криптостойкости некоторых алгоритмов шифрования с открытым ключом, таких как RSA.
Реализация
Функции на языке Haskell
primes :: [Integer] primes = eratosthenes [2..] where eratosthenes (x:xs) = x:eratosthenes (filter ((/= 0).(`mod` x)) xs) factorization :: Integer -> [Integer] factorization 1 = [] factorization n = x:factorization (n `div` x) where x = head [y | y <- (takeWhile (<= n) primes), n `mod` y == 0]
uk:Факторизація