Python是如何实现内置函数pow()的?

我必须编写一个程序来计算a**b % c ,其中bc都是非常大的数字。 如果我只是使用a**b % c ,那真的很慢。 然后我发现内置函数pow()可以通过调用pow(a, b, c)
我很想知道Python是如何实现这个的? 或者我可以在哪里find实现此function的源代码文件?

如果abc是整数,则可以通过二进制幂运算并在每个步骤中减less模c (包括第一个运算 (即,甚至在启动之前减less模c ))来实现更高的效率。 这就是long_pow()的实现 。

您可能会考虑以下两种快速计算(x ** y) % z

在Python中:

 def pow_mod(x, y, z): "Calculate (x ** y) % z efficiently." number = 1 while y: if y & 1: number = number * x % z y >>= 1 x = x * x % z return number 

在C:

 #include <stdio.h> unsigned long pow_mod(unsigned short x, unsigned long y, unsigned short z) { unsigned long number = 1; while (y) { if (y & 1) number = number * x % z; y >>= 1; x = (unsigned long)x * x % z; } return number; } int main() { printf("%d\n", pow_mod(63437, 3935969939, 20628)); return 0; } 

这个文件的第1426行显示了实现math.pow的Python代码,但基本上归结为调用可能具有该函数的高度优化版本的标准C库。

对于密集型数据处理来说,Python可能会很慢,但是Psyco可以提供一个相当快的速度,但不会像调用标准库的C代码那么好。

我不知道python,但是如果你需要快速的权力,你可以使用指数平方:

http://en.wikipedia.org/wiki/Exponentiation_by_squaring

这是一个简单的recursion方法,它使用指数的交换性质。

Python对一般情况使用Cmath库,对其一些概念(如无穷大)使用它自己的逻辑。