Факторизація цілих чиселФакториза́ція цілого числа — розкладання заданого цілого числа на прості множники. На відміну від задачі розпізнавання простоти числа, факторизація ймовірно є складною задачею. Передбачувана складність задачі факторизації лежить в основі криптостійкості деяких алгоритмів шифрування з відкритим ключем, таких як RSA. Алгоритми факторизаціїТривіальним алгоритмом факторизації чисел є повний перебір можливих дільників (до ). Складність цього алгоритму дорівнює операцій. Однак, він швидко знаходить невеликі дільники й застосовується для їх пошуку (зокрема, як початковий крок у деяких інших алгоритмах). Метод Ферма у загальному випадку теж має складність операцій, але є досить ефективним, коли два множники близькі один до одного (приблизно рівні між собою). Метод Лемана комбінує тривіальний алгоритм для пошуку малих дільників (до ) та ідеї, що закладені в методі Ферма. Цей алгоритм став першим, складність якого ( арифметичних операцій) була меншою, ніж . Нині він становить суто історичний інтерес.
Імовірнісний ρ-алгоритм Полларда порівняно швидко знаходить невеликі дільники (якщо такі є) і теж має складність операцій. Для дуже великих чисел час виконання операцій над ними пропорційний їх довжині. З урахуванням цього фактору всі перелічені вище методи (із поліноміальною оцінкою кількості операцій) мають експоненційну часову складність і для факторизації великих чисел практично непридатні[1]. Субекспоненційну оцінку обчислювальної складності мають методи Діксона, ланцюгових дробів, квадратичного решета й еліптичних кривих[en] . Для факторизації чисел понад 10100 найефективнішим алгоритмом факторизації є метод решета числового поля з обчислювальною складністю [2]. Теоретичні проблемиПитання про існування алгоритму факторизації з поліноміальною складністю на класичному комп'ютері є однією з важливих відкритих проблем сучасної теорії чисел. У той же час, для спорідненої задачі про розпізнавання простоти числа існує поліноміальне рішення — 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]
Див. такожДжерела
Посилання
Information related to Факторизація цілих чисел |