【问题标题】:Recursive exponentiation to code代码的递归取幂
【发布时间】:2014-08-23 05:23:04
【问题描述】:

我有一道数学题出现在 Olympiapad 中,我正在尝试用代码来实现它。问题是,我无法弄清楚这个问题的逻辑。

问题是,

9^(9^(9^(9^...... 1001 次......)))。答案的最后 5 位数字是多少?

如果有人能告诉我该怎么做,我会很高兴。请记住,由于我需要在代码中实现这一点,因此需要较少步骤并因此在复杂性方面更优化的解决方案对我来说是有利的。

但是,如果您有任何方法可以找到正确的解决方案,我也想知道这一点,因为我无法理解这一点。

【问题讨论】:

  • 在看到modpow(9,1001,100000); 之前问了很多次琐碎的事情,寻找模运算和功率
  • @Spektre Duuuuude ...这太恶心了!但是,在性能方面,它会很烂:)。首先,链接到MSDN page。其次,我错了,计算需要2毫秒(60009)。
  • @SPecktre 是的,我真的想要这个问题的最佳解决方案
  • @Spektre:问题不在于 9^1001。它是关于塔 9^9^9^9...^9 和 1001 个 9。至少,这是在数学奥林匹克上提出的问题类型。看来这里很多人对 9^1001 更感兴趣。
  • 提示:如果这样的电力塔超过15层,结果是一样的。这是因为 φ(φ(...φ(10^5)..))=1,其中 φ(欧拉方程)重复了 15 次。

标签: performance math numbers logic exponent


【解决方案1】:

看起来其他一些答案计算 9^1001。这不是提出的问题。这对于奥林匹克问题来说太简单了。

定义 T(a,n) 使得 T(a,1) = a,并且 T(a,n) = a^T(a,n-1)。这称为tetration。问题要求 T(9,1001) mod 100,000。

要解决实际问题,使用哪个模数并不明显。 T(a,n) mod m 并不总是 T(a,n mod m) mod m。例如,T(2,3) = 2^2^2 = 2^4 = 16. T(2,4) = 2^16 = 65536. Mod 10,你不能只计算 T(2,3) mod 10 = 6 然后 2^6 mod 10 = 64 mod 10 = 4。T(2,4)=65536 的最后一位是 6,而不是 4。

但是,您也可以计算出 9^2500 = 1 mod 100000,因此 9^100000 = 1 mod 100000。 (通过中国剩余定理,您可以分析 9 mod 2^5 和 5^5 的幂。)因此,您只需跟踪 T(9,n) mod 2500 或 100000 的值即可确定 T(9, 1001) mod 100000。计算 t = T(9,1000) mod 2500,然后计算 powermod(9,t,100000)。

实际上,将 n 映射到 9^n mod 100000 的函数会迅速稳定到 45289 处的固定点。9^9 mod 2500 是 489,9^489 mod 2500 是 2289,9^2289 mod 2500 是 289 , 9^289 mod 2500 又是 289。由于 9^289 mod 100000 是 45289,所以 T(9,4), T(9,5), ..., T(9,1001) 都以 45289 结尾。


编辑:让我充实 Egor Skriptunoff 的评论。 9 mod 10^5 周期的幂,周期除以 phi(10^5)=40000,其中 phi 是Euler Totient function。因此,我们只需要确定 T(9,1000) mod 40000。9 mod 40000 周期的幂,周期除法 phi(40000) =16000,所以我们只需要找到 T(9,999) mod 16000 等。由于 phi 迭代10^5 的 15 次是 1,我们知道 9 mod phi^15(10^5) 的任何幂的值,因此 T(9,16) = T(9,n) mod 10^5 为任何更大n.

【讨论】:

  • 出于好奇,由于数学超出了我的深度,我更新的答案是否正确?
  • @Noctis:应该可以。小问题:看起来您正在计算 T(9,1002) mod 100000,尽管它给出了相同的值。您可能会将结果初始化为 1 而不是 9。主要问题是,虽然在这种情况下可以跟踪 T(9,n) mod 100000,但类似的陈述并不总是正确的。
猜你喜欢
  • 2015-11-08
  • 1970-01-01
  • 1970-01-01
  • 2020-04-02
  • 2018-07-28
  • 1970-01-01
  • 1970-01-01
  • 2020-06-11
相关资源
最近更新 更多