Алгоритм выполнения арифметической операции над очень большими числами - PullRequest
1 голос
/ 05 августа 2011

Мне нужен алгоритм для выполнения арифметических операций с большими числами (которые намного выше диапазона с плавающей запятой, double int или любого другого типа данных в этом отношении).Я должен написать код на языке C. Я попытался найти здесь: Кнут, Дональд, Искусство компьютерного программирования, ISBN 0-201-89684-2, Том 2: Получисленные алгоритмы, Раздел 4.3.1:Классические алгоритмы но не выдержали.Мне просто нужен алгоритм, а не код.

Ответы [ 5 ]

3 голосов
/ 13 марта 2012

Я думаю, что алгоритм Карацубы является лучшим для выполнения арифметических операций с большими числами. Для достаточно больших n другое обобщение, алгоритм Шёнхаге-Штрассена, еще быстрее.Вы можете найти алгоритм в Карацуба или Карацуба_Multiplication

3 голосов
/ 05 августа 2011

Кроме того, насколько я знаю, вы не получите намного лучше, чем простой линейный алгоритм O (n), т.е. просто добавьте цифру за цифрой. Вероятно, вам все равно придется читать весь ввод, так что он по крайней мере линейный. Возможно, вам удастся сделать разные трюки, чтобы уменьшить константу.

Ваша главная проблема - умножение из-за квадратичной природы основного алгоритма длинного умножения. Возможно, вы захотите рассмотреть один из нескольких гораздо более быстрых методов, приведенных здесь . Метод Карацубы немного сложен в реализации, но, вероятно, это самый простой нетривиальный алгоритм, который даст вам выигрыш. В противном случае вам придется более подробно изучить методы быстрого преобразования Фурье, такие как алгоритм Шёнхаге-Штрассена или алгоритм Фюрера .

См. Также Большая буква O .

2 голосов
/ 05 августа 2011

Нет алгоритма для выполнения арифметических операций с очень большими числами.Арифметические операции остаются прежними.То, что вам нужно, в классе, как http://www.codeproject.com/KB/cs/BigInt.aspx

1 голос
/ 05 августа 2011

Книга Простые числа и компьютерные методы факторизации от Riesel содержит приложение с легко читаемым кодом для арифметики с множественной точностью.

0 голосов
/ 05 августа 2011

Только для алгоритмов читайте Knuth vol 2 или Crandall and Pomerance.Для кодирования я бы предложил сначала разработать очевидные алгоритмы, прежде чем переходить к преобразованиям Карацубы или Фурье.

...