Факториза́ція цілого числа — розкладання заданого цілого числа на прості множники.
На відміну від задачі розпізнавання простоти числа, факторизація ймовірно є складною задачею. Передбачувана складність задачі факторизації лежить в основі криптостійкості деяких алгоритмів шифрування з відкритим ключем, таких як RSA.
Алгоритми факторизації
Тривіальним алгоритмом факторизації чисел є повний перебір можливих дільників (до ). Складність цього алгоритму дорівнює . Однак, він швидко знаходить невеликі дільники й застосовується для їх пошуку (зокрема, як початковий крок у деяких інших алгоритмах).
Метод Ферма у загальному випадку теж має складність , але є досить ефективним, коли два множники близькі один до одного (приблизно рівні між собою).
Метод Лемана комбінує тривіальний алгоритм для пошуку малих дільників (до ) та ідеї, що закладені в методі Ферма. Цей алгоритм став першим, складність якого ( арифметичних операцій) була меншою, ніж . Нині він становить суто історичний інтерес.
ρ-алгоритм Поларда має складність .
Метод факторизації Діксона, метод неперервних дробів, метод квадратичного решета і метод на основі еліптичних кривих[en] мають обчислювальну складність.
Для факторизації чисел понад 10100 найефективнішим алгоритмом факторизації є метод решета числового поля з обчислювальною складністю [джерело?].
На 32-бітних процесорах для чисел у діапазоні від 1010 до 1018 (тобто, довжиною від 32 до 60 біт) найшвидшим є метод квадратичних форм Шенкса. Він застосовується як допоміжний у багатьох реалізаціях потужніших методів — для факторизації проміжних чисел, які не мають малих дільників.
Алгоритм Поліґа-Геллмана має складність , але може бути ефективним для чисел спеціального виду.
Теоретичні проблеми
Питання про існування алгоритму факторизації з поліноміальною складністю на класичному комп'ютері є однією з важливих відкритих проблем сучасної теорії чисел. У той же час, для спорідненої задачі про розпізнавання простоти числа існує поліноміальне рішення — AKS тест простоти.
Розв'язок задачі факторизації з поліноміальною складністю можливий на квантовому комп'ютері за допомогою алгоритму Шора.
Передбачувана складність задачі факторизації лежить в основі криптостійкості деяких алгоритмів шифрування з відкритим ключем, таких як RSA.
Реалізація
Функції на мові Haskell
Нижче наведено реалізацію тривіального алгоритму (перебором простих дільників) на мові програмування 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]
Див. також
Джерела
Посилання
- . ІТ Блог. 24 вересня 2007. Архів оригіналу за 16 травня 2019. Процитовано 13 грудня 2021.(укр.)[неавторитетне джерело]
Це незавершена стаття з математики. Ви можете допомогти проєкту, виправивши або дописавши її. |