WolframAlpha如何快速取幂数字?

时间:2013-10-14 00:16:15

标签: c algorithm math cryptography rsa

我想知道RSA算法如何处理如此大的数字和tried one example in WolframAlpha。他们怎么能处理这些疯狂的数字?

编辑:只是为了让它更奇怪,one more example

1 个答案:

答案 0 :(得分:15)

有一个名为 exponentiation by squaring 的简单算法,可用于非常有效地计算 b modc。这是基于观察

  

a 2k mod c =(a k 2 mod c

     

a 2k + 1 mod c = a·(a k 2 mod c

鉴于此,您可以使用此递归方法计算 b mod c:

function raiseModPower(a, b, c):
    if b == 0 return 1
    let d = raiseModPower(a, floor(b/2), c)
    if b mod 2 = 1:
        return d * d * a mod c
    else
        return d * d mod c

这只做O(log b)乘法,其中每个都不能有比O(log c)更多的数字,所以它真的很快。这就是RSA实现如何将事物提升为权力的方式。如果您愿意,可以将其重写为迭代,但我认为递归表示非常简洁。

一旦有了这个算法,就可以使用标准技术来乘以任意精度数来进行计算。由于只需要乘法的O(log b)迭代(与b迭代相反),所以它很快就疯了。你实际上从来没有计算过 b 然后用c修改它,这也使得数字保持较低并使其更快。

希望这有帮助!