我想执行这个数学函数:
3^(3^1000000000) mod 1000000007
结果是:930782551
但是在python中直接执行需要花费大量时间,程序会挂起:
return pow(3,pow(3,1000000000),1000000007)
所以我认为执行此操作将是相同的:
return pow(3,pow(3,1000000000, 1000000007),1000000007)
但结果是:270196661
如何在合理的时间内获得正确的结果930782551
?
答案 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,他可以很好地解决计算时间问题,整个解释就在那里