【发布时间】:2017-06-10 20:44:28
【问题描述】:
我想执行这个数学函数:
3^(3^1000000000) mod 1000000007
这样的结果是:930782551
但是直接在python中做会耗费大量时间,而且程序会挂掉:
return pow(3,pow(3,1000000000),1000000007)
所以我认为执行这个会是一样的:
return pow(3,pow(3,1000000000, 1000000007),1000000007)
但结果是:270196661
我怎样才能在合理的时间内得到正确的结果930782551?
【问题讨论】:
-
你的 WA 表达式应该是
(3^((3^1000000000)mod1000000007))mod1000000007。你放在那里的东西和你放在这里的东西是不一样的。 -
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。见minimal reproducible example。
-
您需要费马小定理/欧拉定理才能有效地做到这一点。幸运的是,1000000007 是素数,因此很容易计算它的总函数。
-
@PM2Ring 我在 math.stackexchange 上问了一个问题,想知道如何计算它。看看我的回答。
-
这个问题非常好,我建议编辑把原来的 pow 函数放入需要大量时间,并询问如何在合理的时间内完成
标签: python modulo exponential bignum wolframalpha