近期,在密码学课程中,在做基本的加密解密运算时,遇到了对除法的模运算,如19/11 mod26。课上给出的方法是求得反模通式-11,即用11对26(除数对模分解),但是最后必须剩下为1。所以在实践中,试除了种以待定系数法求解为基础的求法,这里特作记录,以备今后忘记。 以19/11 mod26为例。由于分析发现,这个算式相当于求解n个26加上19除以11,设此运算为整数运算。 ①将19/11 mod26等效为(n * 26 + 19)/11,由此将问题转换为求解n的值。 ②若问题正确,即答案为整数,则 (n * 26 + 19)mod11=0,移项后整理得,n mod11= (-19) mod11 / 26 mod11即 n = 3 / 4 mod11。 ③ 3 / 4 mod11又是一个新的除式,这里等效为 n =(m * 11 + 3) /4 , 同理(m * 11 + 3)mod4=0 ,移项之后的式子为m mod4 = (-3)mod4 / 11 mod4 即 m = 1 / 3 mod4。 ④ m = 1 / 3 mod4由此得到了个新的除式,利用上面的方法等效为化为m =(k * 4 + 1) /3 ,继续化为 k = 2 / 1 mod 3这样算得结果即在 mod3 中而且数值比较小,可以直接得出 k = 2 。 ⑤将 k =2 带入之前的式子m =(k * 4 + 1) /3 得出 m =3 ,由此 n = 9 ,再带入(n * 26 + 19)/11 计算结果为 23 ,验证一下, 23 * 11 = 253,253 mod26 = 19 。 本法,主要思路是通过迭代运算将 mod的数,以及除数化为更小的值,方便计算,程序设计的话,可以使用借用递归,堆栈等方式来实现。该法还可以判断是否有解,例如19 /10 mod26,由于10的尾数和26尾数凑不出9来,我们发现式子无解,那我们用该方法来计算一下。 19 /10 mod26 等效为 (n * 26 + 19)/10 ,n = 1 / 6 mod10, m = 5 / 4 mod6,k = 5 / 4 mod6, j = 3 / 2 mod4 ,i = 1 / 0 mod 2。除数出现了0 式子无意义,所以无解。该法适用于每次mod值以及除数的值多变的情况下,若是mod值以及除数已定,该法并不能高效地计算出答案,因为。每次都要经历一定的迭代数,次数根据式子而定,不跟据数值大小而定,这是该法的计算优点。
-