2009-10-27 6 views
2

Может ли кто-нибудь указать сайт, на котором я могу найти алгоритм, позволяющий эффективно вычислять целочисленное возведение в степень больших мощностей с помощью C#?Быстрая реализация возведения в степень

например. Я хочу рассчитать 2^60000 или 3^12345

ответ

13

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

Я бы порекомендовал использовать один из existing arbitrary precision arithmetic libraries, like GMP - большинство из которых имеют библиотеки для доступа к ним с C#.

F # поддерживает арифметику произвольной точности с использованием класса BigInt (к которому вы также можете получить доступ с C#, если вы импортируете сборку, в которой он находится). Тем не менее, я не знаю, насколько оптимизирована оптимизация BigInt.

Если вы просто пытаетесь узнать об эффективных алгоритмах для возведения в степень, вам может понадобиться изучить алгоритм повышения эффективности возведения в степень Square-And-Multiply.

+0

Отличный ответ. –

+0

+1. Очень интересно. – RichardOD

0

Отметьте: IntX для работы с целыми числами LARGE. Возможно, вам придется написать свою собственную реализацию власти, но, поскольку поддерживается умножение, это не должно быть так сложно.

Редактировать от 280Z28: Еще одна реализация, которая включает в себя быстрое тестирование Pow, ModPow и primality - это реализация BigInteger (Code Project), которую я использовал в проектах Project Euler в прошлом - хотя теперь я работаю с .NET 4.0 и использовать его реализацию System.Numerics.BigInteger.

+0

Я бы посоветовал использовать более зрелую библиотеку, чем IntX, если результаты вычислений вообще важны. Написание правильной библиотеки для произвольной точности сложнее, чем она выглядит - и многие из небольших проектов там еще не имеют возможности обнаруживать и решать проблемы, которые наносят ущерб большинству реализаций. – LBushkin

2

Целочисленное возведение в степень может эффективно рассчитываться с использованием метода, называемого «Возведение в степень возведения в квадрат» link.

Этот метод также может быть использован для расчета модульного возведения в степень link, который используется в некоторых асимметричных методах шифрования, таких как RSA.

Смежные вопросы