快速取幂实现

时间:2009-10-27 14:49:37

标签: c# performance algorithm exponentiation

有人可以指出一个网站,我可以找到一个算法,使用C#有效地计算整数取幂到大功率?

例如。我想计算2 ^ 60000或3 ^ 12345

3 个答案:

答案 0 :(得分:13)

除非这是作业,否则你可能不希望自己实现任意精度取幂。计算你描述的类型的大指数是复杂的 - 除了性能。

我建议使用其中一个existing arbitrary precision arithmetic libraries, like GMP - 其中大多数都有库从C#访问它们。

F#支持使用BigInt类进行任意精度算术运算(如果导入其中的程序集,也可以从C#访问)。但是,我不知道BigInt取幂的优化程度如何。

如果您只是想了解有效的取幂算法,您可能需要查看Square-And-Multiply算法求幂。

答案 1 :(得分:2)

可以使用称为“通过平方的指数化”link的方法有效地计算整数取幂。

此方法也可用于计算模幂运算link,它用于某些非对称加密方法,如RSA。

答案 2 :(得分:0)

检查一下:IntX用于处理LARGE整数。你可能必须编写自己的权力实现,但由于支持乘法,这应该不会那么难。

编辑280Z28:包括快速Pow,ModPow和素性测试的另一个实现是这个BigInteger实现(代码项目),我过去曾用过Project Euler问题 - 尽管我现在正在使用.NET 4.0并使用其System.Numerics.BigInteger实现。