Python中**和%运算符对大数的行为
当我在Python解释器中输入一个很大的数字a(有20位数),一个较小的数字b(有4位数),还有一个很大的数字c(也有20位数),用这个公式 ** 和 % 进行计算时,我发现Python的计算速度非常快,几乎和使用pow(a, b, c)的速度一样。我原本以为Python会先计算a的b次方,然后再对结果取模(%),这样计算应该会花费更多的时间。
那么,这背后有什么秘密呢?
4 个回答
2
这里没有什么神奇的东西,主要是因为Python支持任意精度的整数,而且实现得很好。它确实是先计算了a的b次方,然后再对c取余。
4
20个数字在现代电脑上简直是小巫见大巫。试试2000个数字,你可能会看到一些变化。
另外,这个之前的问题也很相关: Python是怎么实现内置函数pow()的?
6
如果你在Python解释器里输入一些代码,比如:
20937505974095709374 ** 3438
然后你发现要等几秒钟。接着你尝试输入:
20937505974095709374 ** 3438 % 6
这时候你就会发现没有等待时间,心里会想为什么会有这样的区别。其实,第一次你看到的延迟,就是你的终端花时间来处理和显示你刚刚创建的那个大数字。