Есть ли более быстрый метод деления больших целых чисел (имеющих 1000 и более цифр), кроме школьного метода?
Отдел больших чисел
Ответы (1)
В Википедии перечислены множественные алгоритмы деления. См. раздел Вычислительная сложность математических операций, в котором перечислены Длинное деление школьного учебника как O(n^2)
и метод Ньютона как M(n)
, где M
— сложность используемого алгоритма умножения, который может быть равен O(n log n 2^(
log*
n))
асимптотически.
Обратите внимание на обсуждение одного из алгоритмов умножения, что асимптотически лучший алгоритм не обязательно является самым быстрым для «маленьких» входных данных:
На практике алгоритм Шёнхаге-Штрассена начинает превосходить старые методы, такие как умножение Карацубы и Тума-Кука, для чисел от 2 ^ (2 ^ 15) до 2 ^ (2 ^ 17) (от 10 000 до 40 000 десятичных цифр). Библиотека GNU Multi-Precision использует ее для значений от 1728 до 7808 64-битных слов (от 111 000 до 500 000 десятичных цифр), в зависимости от архитектуры. Существует Java-реализация Шёнхаге-Штрассена, в которой используется более 74 000 десятичных цифр.