Python中**和%运算符对大数的行为

1 投票
4 回答
2522 浏览
提问于 2025-04-16 23:18

当我在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

这时候你就会发现没有等待时间,心里会想为什么会有这样的区别。其实,第一次你看到的延迟,就是你的终端花时间来处理和显示你刚刚创建的那个大数字。

撰写回答