Я знаю, что компьютеры используют метод shift и add для умножения двух чисел.Каков самый быстрый алгоритм для умножения двух n-значных чисел?
Бит мудрый сдвиг умножается и делит на полномочия двух. Эта операция выполняется быстрее, чем команда умножения. Умножение на константу и деление на константу может быть реализовано с использованием последовательности сдвигов и добавлений или вычитаний.
((x << 2) + x) << 1 // Here 10*x is computed as (x*2^2 + x)*2
(x << 3) + (x << 1) // Here 10*x is computed as x*2^3 + x*2
Но есть ли более быстрый алгоритм для этого?
Thx за помощь :)
Если у вас есть достойный компилятор, '10 * x' будет самым быстрым алгоритмом. – stefan
@stefan Я согласен. Компилятор будет оптимизировать – amchacon
Это не умножение двух n-разрядных чисел. Это умножение на константу, поэтому нетрудно получить O (n) (и, очевидно, вы не можете сделать ничего лучше). Так что же вы действительно ищете? Что-то вроде Schönhage-Strassen или что-то похожее на код из вашего вопроса? – harold