【问题标题】:How can WolframAlpha exponentiate numbers so quickly?Wolfram Alpha 指数数怎么能这么快?
【发布时间】:2013-10-14 00:16:15
【问题描述】:

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

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

【问题讨论】:

标签: c algorithm math cryptography rsa


【解决方案1】:

有一个名为 exponentiation by squaring 的简单算法可用于非常有效地计算 ab mod c。这是基于观察到的

a2k mod c = (ak)2 mod c

a2k + 1 mod c = a · (ak)2 mod c

鉴于此,您可以使用以下递归方法计算 ab 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 次迭代相反),因此速度非常快。您实际上永远不会最终计算 ab,然后用 c 对其进行修改,这也可以保持较低的位数并使其更快。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2016-03-19
    • 2010-09-13
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 2020-12-19
    • 2011-06-02
    • 2012-03-18
    • 2014-02-21
    相关资源
    最近更新 更多