11、模块化运算:原理、实现与特殊模值处理

模块化运算:原理、实现与特殊模值处理

1. 模块化约简基础

模块化约简在很多领域都有重要应用,尤其是在密码学中。我们先来看几个模块化约简的例子:
- 例 1:设 (x = 101110011000_2 = 2968),(m = 10001_2 = 17)。将 (x) 按每 4 位分组,(j = 3) 时,(x_2 = 1011_2 = 11),(x_1 = 1001_2 = 9),(x_0 = 1000_2 = 8)。则 (2968\bmod{17}=(11 - 9 + 8)\bmod{17}=10)。
- 例 2:设 (x = 1101101110011000_2 = 56216),(m = 10001_2 = 17)。(j = 4) 时,(x_3 = 1100_2 = 13),(x_2 = 1011_2 = 11),(x_1 = 1001_2 = 9),(x_0 = 1000_2 = 8)。则 (56216\bmod{17}=(-13 + 11 - 9 + 8)\bmod{17}=-3\bmod{17}=14)。

2. 特殊模值 (2^n - 1) 的实现

在模块化运算中,模值为 (2^n - 1) 的情况比较常见。在 (n) 位操作数的模 ((2^n - 1)) 加法中,判断中间结果与模值的大小关系相对容易:
- 若中间结果小于模值,加法无进位输出,结果就是模 (2^n - 1) 的正确结果。
- 若中间结果大于模值,有进位输出,丢弃进位并加 1 就得到模 (2^n - 1) 的正确结果。
- 若中间结果等于模值(二进制为 (11\cdots1)),情况稍复杂,需单独检测,然后加 1 并丢弃进位得到正确结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值