pow()函数给出了错误的结果

时间:2017-06-10 20:44:28

标签: python modulo exponential bignum wolframalpha

我想执行这个数学函数:

3^(3^1000000000) mod 1000000007

结果是:930782551

但是在python中直接执行需要花费大量时间,程序会挂起:

return pow(3,pow(3,1000000000),1000000007) 

所以我认为执行此操作将是相同的:

return pow(3,pow(3,1000000000, 1000000007),1000000007) 

但结果是:270196661

如何在合理的时间内获得正确的结果930782551

2 个答案:

答案 0 :(得分:2)

根据您在问题中的修改,使用

>>> pow(3, pow(3, 1000000000, 500000003), 1000000007)
930782551

其他任何东西都需要永远计算。这个表达式是用Fermat的小定理得到的。

我在math.stackexchange.com上问question。底线,pow不会打印不正确的结果。这是完全正确的。你的输入错了。

答案 1 :(得分:1)

  

修改

起初我认为这是一个sintaxis问题,所以我回答说:

return pow(3,pow(3,1000000000),1000000007)

但这需要不合理的时间。所以我试着解决计算时间的问题,但我没有及时做到:)。

  

完美的答案是@Coldspeed,他可以很好地解决计算时间问题,整个解释就在那里