【问题标题】:What is the explanation for being able to simplify 'A^(B^C) mod prim' such that it is efficiently computable?能够简化 'A^(B^C) mod prim' 以使其可有效计算的解释是什么?
【发布时间】:2020-11-05 21:59:29
【问题描述】:

前奏

我们要计算 modular exponentiation A(BC) mod p = ?,其中 ABC 和 @987654333 @ 是已知的,p 是一个基本数字。例如:243mod 23 = 6

如果我们直接计算的话,首先是BC = e,然后是Ae = n,最后是n mod p;我们将遇到为 e 和 n 创建(可能)非常大的中间结果的问题。例如:e = 43 = 64,n = 264 ≈ 1.845x1019,最后 n mod 23 = 6

但是,以直接的方式执行此操作,我们没有利用 p 是一个素数并且我们正在执行模幂运算这一事实。而且这样做,我们会遇到用计算机程序在 time (CPU) 和 space (memory) 方面计算结果的问题。

(是的,我们可以通过首先将 A(BC) mod p 减少为Ae mode p. 例如 A2 mod p = (A ⋅ A) mod p = [(A mod p) ⋅ (A mod p)] mod p –但这不是我们想要去的地方)。

聪明的方法——使用费马小定理

正如GeeksforGeeks 上的Find power of power under mod of a prime这个问题的起源 中所述,我们在A(BC) 中的指数BC mod p 可以使用Fermat's little theorem 以不同方式表示。

费马小定理指出:a(p - 1) ≡ 1 (mod p) 如果 p 是素数

导致以下转变:

  1. 可以重写指数 BC 为 x ⋅ (p - 1) + y

  2. 使用替代表达式,我们的 ABC 变为 Ax ⋅ (p - 1) + y = Ax ⋅ (p - 1) ⋅ Ay

  3. 使用费马小定理 Ax ⋅ (p - 1) = 1;计算 A(BC) mod p 变为计算 Ay

  4. 使用 BC = x ⋅ (p - 1) + y 那么 y 可以写成 BC mod (p - 1)

从上面我们得到 A(BC) mod p = (Ay) mod p

有了所有这些,我们可以分两步计算 A(BC) mod p,同时保持中间结果很小。

  1. y = (BC) mod (p - 1)
  2. 结果 = (Ay) mod p

例如:243mod 23

  1. y = 43 mod (23 - 1) = 64 mod 22 = 20
  2. 结果 = 220 mod 23 = 1048576 mod 23 = 6

问题

我的问题是关于上述转换的,我在任何地方都找不到(易于理解的)解释。也密切关注Fermat's little theorem 并没有帮助。可能这些转换应该是显而易见的,但我根本不清楚。

特别是,我不明白为什么指数 BC 可以表示为 x ⋅ (p - 1) + y。 – 这背后的原因是什么?

还有,为什么在使用Fermat's little theorem时要“明显”:

a(p - 1) ≡ 1 (mod p) 即 Ax ⋅ (p - 1) = 1?

如果有人能以易于理解的方式解释这些转换,那就太好了。

【问题讨论】:

  • 这似乎是一道数学题,而不是编程题。
  • @Damien_The_Unbeliever 是的,我同意——这是一个数学理解问题。对我来说,这个问题是否是on-topic 并不明显。不过,这个问题是关于理解在尝试进行这种计算和解决(很可能)数字溢出时相关的软件算法。
  • 如果这个问题在这里没有得到任何答案 - 您可能还想考虑在 Computer Science 或(可能是)Mathematics Stack Exchange 网站上提出您的问题。在任何情况下,请务必在发布之前查看他们各自的帮助页面(主题是什么,如何提问)。
  • 当它回答您的问题时,不要忘记接受一个答案(勾选它旁边的复选标记)。这样,您的问题就不会再在搜索中显示为未回答了。

标签: algorithm optimization exponentiation mod theorem


【解决方案1】:

让我来解决您的两个主要问题:

特别是,我不明白为什么指数 BC 可以表示为 x ⋅ (p - 1) + y。 – 这背后的原因是什么?

任意整数 k 对于某个模数 m 可以表示为 k = xm + y。将其视为 k 除以 m,得到 x 和 余数 y。所以让 k = BC 和 m = p - 1 和 tada。

如果能帮助你理解,打个比方,你可以把任意数量的分钟变成“小时 + 分钟”,当 m = 60 时,x = 小时,y = 剩余分钟数。

还有,为什么在使用费马小定理时它应该是“显而易见的”:

a(p - 1) ≡ 1 (mod p) 即 Ax ⋅ (p - 1) = 1?

假设我们有一个(p - 1) ≡ 1 (mod p)。如果我们将两边都乘以 a(p - 1) 会发生什么?我们得到:

    a(p - 1) a(p - 1) ≡ a(p - 1) (mod p)
a(p - 1) + (p - 1) ≡ 1 (mod p)             (zxzy = zx +y 和右手边等价于我们之前看到的 1)
a2(p - 1) ≡ 1 (mod p)

我们可以反复将两边乘以a(p - 1)得到a3(p - 1),a4(p - 1) 等,所以我们说对于任何整数 x,我们有一个x(p - 1) ≡ 1 (mod p)。

【讨论】:

  • 我认为这是对步骤 (1) 和 (3) 的可以理解的解释。尽管问题中没有具体要求;也许您想扩展最后一步的答案,(4):使用 B^C = x ⋅ (p - 1) + y 那么 y 可以写成 B^C mod (p - 1)?
  • @IvoMori 我想我也通过解释 yremainder 来解释这一点。
  • 同意(我只需要考虑一下——我还没有喝咖啡),如果任何整数 n 可以表示为 x ⋅ (p - 1) + y,正如你所解释的那样对于 (1) – 那么 n 的余数 y 是 n mod (p-1)。如果 n 是 B^C 则 y = B^C mod (p-1)。
猜你喜欢
  • 2019-08-29
  • 1970-01-01
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 2015-12-05
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多