快速模幂运算

快速计算 A^B mod C

特例:如果B是2的幂

使用模乘法规则:

例如 ·

A^2 mod C = (A * A) mod C = ((A mod C) * (A mod C)) mod C

我们可以用此来快速计算 7^256 mod 13

7^1 mod 13 = 7 7^2 mod 13 = (7^1 *7^1) mod 13 = (7^1 mod 13 * 7^1 mod
13) mod 13

我们可以把之前 7^1 mod 13 的结果 代入 这个方程式。

7^2 mod 13 = (7 *7) mod 13 = 49 mod 13 = 10 7^2 mod 13 = 10 7^4 mod 13
= (7^2 *7^2) mod 13 = (7^2 mod 13 * 7^2 mod 13) mod 13

我们可以把之前 7^2 mod 13 的结果 代入 这个方程式。

7^4 mod 13 = (10 * 10) mod 13 = 100 mod 13 = 9 7^4 mod 13 = 9 7^8 mod
13 = (7^4 * 7^4) mod 13 = (7^4 mod 13 * 7^4 mod 13) mod 13

我们可以把之前 7^4 mod 13 的结果 代入 这个方程式。

7^8 mod 13 = (9 * 9) mod 13 = 81 mod 13 = 3 7^8 mod 13 = 3

以这种方式继续,将先前的结果代入我们的等式中。
…在5个迭代之后可以得到:

7^256 mod 13 = (7^128 * 7^128) mod 13 = (7^128 mod 13 * 7^128 mod 13)
mod 13 7^256 mod 13 = (3 * 3) mod 13 = 9 mod 13 = 9 7^256 mod 13 = 9

只要 B 是 2 的幂,我们就有一个快速计算 A^B mod C 的方法。

然而,如果 B 不是 2 的幂,我们也需要一种快速模乘法的方法。

通解:如果 B 是任何数

如: 5^117 mod 19

步骤1:将B记录为二进制形式,使其成为2的幂

117 = 1110101 (binary)

从最右边的数字开始,让k = 0 并且 为 每个数字:

  • 如果数字为1,我们需要一个2^k的部分,否则我们不需要
  • 1 加到 k,然后向左移动到下一个数

117 = (2^0 + 2^2 + 2^4 + 2^5 + 2^6)
117 = 1 + 4 + 16 + 32 + 64
5^117 mod 19 = 5^(1+4+16+32+64) mod 19
5^117 mod 19 = (5^1 * 5^4 * 5^16 * 5^32 * 5^64) mod 19

步骤 2:计算 ≤ B 的 2 的幂 mod C

5^1 mod 19 = 5

5^2 mod 19 = (5^1 * 5^1) mod 19 = (5^1 mod 19 * 5^1 mod 19) mod 19
5^2 mod 19 = (5 * 5) mod 19 = 25 mod 19
5^2 mod 19 = 6

5^4 mod 19 = (5^2 * 5^2) mod 19 = (5^2 mod 19 * 5^2 mod 19) mod 19
5^4 mod 19 = (6 * 6) mod 19 = 36 mod 19
5^4 mod 19 = 17

5^8 mod 19 = (5^4 * 5^4) mod 19 = (5^4 mod 19 * 5^4 mod 19) mod 19
5^8 mod 19 = (17 * 17) mod 19 = 289 mod 19
5^8 mod 19 = 4

5^16 mod 19 = (5^8 * 5^8) mod 19 = (5^8 mod 19 * 5^8 mod 19) mod 19
5^16 mod 19 = (4 * 4) mod 19 = 16 mod 19
5^16 mod 19 = 16

5^32 mod 19 = (5^16 * 5^16) mod 19 = (5^16 mod 19 * 5^16 mod 19) mod 19
5^32 mod 19 = (16 * 16) mod 19 = 256 mod 19
5^32 mod 19 = 9

5^64 mod 19 = (5^32 * 5^32) mod 19 = (5^32 mod 19 * 5^32 mod 19) mod 19
5^64 mod 19 = (9 * 9) mod 19 = 81 mod 19
5^64 mod 19 = 5

步骤3:使用模乘法属性来组合已算出的 mod C 的值

5^117 mod 19 = ( 5^1 * 5^4 * 5^16 * 5^32 * 5^64) mod 19

5^117 mod 19 = ( 5^1 mod 19 * 5^4 mod 19 * 5^16 mod 19 * 5^32 mod 19 * 5^64 mod 19) mod 19

5^117 mod 19 = ( 5 * 17 * 16 * 9 * 5 ) mod 19

5^117 mod 19 = 61200 mod 19 = 1

5^117 mod 19 = 1

备注:

存在更多优化技术,但不在本文的讨论范围之内。 应该注意的是,当我们在密码学中执行模幂运算时,使用B > 1000位的指数并不罕见。

参考链接

Khan Academy

  • 9
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值