基础算法(四)同余定理

1.定理描述

给定一个正整数m(m > 1),如果两个整数 a 和 b 满足 a-b能够被 m 整除,即 (a-b)/m 得到一个整数,那么就称 a 与 b 对模m同余,记作:a ≡ b(mod m),读作 :a 与 b 对模 m同余。

显然有如下事实:

1)若 a ≡ 0(mod m),则 a | m;

2) a ≡ b(mod m)等价于分别用 m 去除 a 和 b ,余数相同。

2.基本性质

① 反身性:a ≡ a(mod m)

②对称性:若 a ≡ b(mod m),则 b ≡ a(mod m)

③传递性:a ≡ b(mod m),b ≡ c(mod m),则 a ≡ c(mod m)

④同余式相加: a ≡ b(mod m),c ≡ d(mod m),则 a ± c ≡ b ± d(mod m)

⑤同余式相乘:a ≡ b(mod m),c ≡ d(mod m),则 ac ≡ bd(mod m)

⑥线性运算:a ≡ b(mod m),c ≡ d(mod m),

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Python代码示例,实现中国剩余定理公钥密码算法所需的数学基础运算: ```python import math # 模运算 def mod(a, m): return a % m # 求模反元素 def mod_inverse(a, m): gcd, x, y = extended_euclidean_algorithm(a, m) if gcd != 1: return None # a和m不互质,无法求模反元素 else: return x % m # 快速幂算法 def fast_power(a, n, m): result = 1 while n > 0: if n % 2 == 1: result = (result * a) % m a = (a * a) % m n = n // 2 return result # 扩展欧几里得算法 def extended_euclidean_algorithm(a, b): if b == 0: return a, 1, 0 else: gcd, x, y = extended_euclidean_algorithm(b, a % b) return gcd, y, x - (a // b) * y # 中国剩余定理公钥密码算法 def chinese_remainder_theorem(ciphertexts, moduli): # 求所有模数的积 product = math.prod(moduli) # 求每个模数在总积中的比例 proportions = [product // modulus for modulus in moduli] # 求每个比例的模反元素 inverses = [mod_inverse(proportion, modulus) for proportion, modulus in zip(proportions, moduli)] # 按照中国剩余定理公式计算明文 plaintext = 0 for ciphertext, proportion, inverse in zip(ciphertexts, proportions, inverses): plaintext += ciphertext * proportion * inverse # 对总积取模,得到最终明文 return plaintext % product # 测试代码 if __name__ == "__main__": ciphertexts = [2, 3, 2] # 密文列表 moduli = [3, 5, 7] # 模数列表 plaintext = chinese_remainder_theorem(ciphertexts, moduli) # 解密 print("明文为:", plaintext) ``` 注:以上代码仅为示例,实际使用时需要根据具体情况进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值