同余与乘法逆元

  1. 同余:

    • 定义:设m≠0,若m∣a-b,即a-b=km,则称a与b同余,余数为m。
    • 充要条件:a、b关于模m同余的充要条件是整数a和b被同一正整数m除时,有相同的余数。(a % m)=(b % m)意味a≡b (%m)
    • 性质:
      同余定理1
      这里写图片描述
    • 同余类:根据整数模n所得的余数,可以把整数分成n个等价类:[0],[1],…,[n-1]。
      包含整数的模n等价类为:[a]n={a+kn| k∈Z}。

    • 例题:求3406写成十进位数时的个位数.
      根据题意是要求a满足3406 ≡a(mod 10)
      显然32 ≡9 ≡-1 (mod 10),
      34 ≡1 (mod 10),
      从而3404 ≡1 (mod 10),
      因此3406 ≡ 3404 × 32 ≡9(mod 10)
      所以个位数是9.

  2. 模运算的运算规则

    • (1)(a + b) % p = (a % p + b % p) % p
    • (2)(a - b) % p = (a % p - b % p) % p
    • (3)(a * b) % p = (a % p * b % p) % p
    • (4)a ^ b % p = ((a % p)^b) % p
    • 结合律:
      (5)((a+b) % p + c) % p = (a + (b+c) % p) % p
      (6)((a*b) % p * c)% p = (a * (b*c) % p) % p
    • 交换律:
      (7)(a + b) % p = (b+a) % p
      (8)(a * b) % p = (b * a) % p
    • 分配律:
      (9)(a+b) % p = ( a % p + b % p ) % p
      (10) ((a +b)% p * c) % p = ((a * c) % p + (b * c) % p) % p
    • 重要定理:
      (11)若a≡b (% p),则对于任意的c,都有(a + c) ≡ (b + c) (%p)
      (12)若a≡b (% p),则对于任意的c,都有(a * c) ≡ (b * c)
      (13) 若a≡b (% p),c≡d (% p),则 (a + c) ≡ (b + d) (%p),(a - c) ≡ (b - d) (%p),
      (a * c) ≡ (b * d) (%p),(a / c) ≡ (b / d) (%p)
  3. 乘法逆元:

    • 定义:
      满足a*k≡1 (mod p)的k值就是a关于p的乘法逆元。eg: 1=5*3-14 所以5关于模14的乘法逆元为3.

    • 应用:
      当我们要求 (a/b) mod P 的值时,如果 a 很大,无法直接求得a/b的值时,我们就可以使用乘法逆元。我们可以通过求b关于P的乘法逆元k,将a乘上k再模P,即(a%P*k)。其结果与(a/b) mod P等价。

### 关于乘法逆元的定义性质 在模 \( p \) 的意义下,如果存在整数 \( x \),使得 \( a \cdot x \equiv 1 \ (\text{mod} \ p) \),则称 \( x \) 是 \( a \) 模 \( p \) 的乘法逆元[^1]。然而,只有当 \( a \) 和 \( p \) 互质时,\( a \) 才可能有模 \( p \) 下的乘法逆元[^3]。 对于 \( a \) 和 \( p \) 不互质的情况,即 \( \gcd(a, p) > 1 \),不存在这样的 \( x \) 能够满足上述条件。这是因为根据扩展欧几里得算法,寻找乘法逆元的过程本质上是在解线性方程: \[ a \cdot x + p \cdot y = 1 \] 其中 \( x \) 即为所乘法逆元。而该方程是否有解取决于 \( \gcd(a, p) \) 是否能够整除常数项 1。显然,当 \( \gcd(a, p) > 1 \) 时,此方程无解,因此无法找到对应的乘法逆元[^2]。 ### 特殊情况下的替代方案 尽管如此,在某些特定场景中仍可采用其他方式来模拟或近似实现类似于“乘法逆元”的功能。以下是几种常见的思路: #### 方法一:通过分数表示代替直接逆元 如果目标是为了完成某种形式上的“除法”,可以通过引入额外变量或者转换成分数的形式间接表达结果。例如给定两个数 \( b \) 和 \( c \),希望计算 \( (b / c) \% p \),即使 \( c \) 和 \( p \) 并非互素关系,也可以改写为如下形式: \[ (b / c) \% p = ((b \% p) \times d^{-1}) \% p, \] 这里 \( d^{-1} \) 表达的是某个适当选取数值作为伪逆元的角色。具体操作需视实际应用需调整[^4]。 #### 方法二:利用中国剩定理(CRT) 假设已知多个不的模数及其对应条件下各自的乘法逆元,则可通过CRT组合这些局部信息得到全局解决方案。这种方法特别适用于多组数据联合分析的情形之下。 ```python from sympy import mod_inverse def crt_modular_inverse(a_list, m_list): """ 使用 CRT 计算整体意义上的 '伪' 乘法逆元 """ total_product = 1 result = 0 for mi in m_list: total_product *= mi for ai, mi in zip(a_list, m_list): pi = total_product // mi yi = mod_inverse(pi % mi, mi) result += ai * pi * yi return result % total_product # 示例调用 print(crt_modular_inverse([4], [7])) # 输出应接近原问题中的简单情形 ``` 注意以上代码片段仅为示意用途,并未完全覆盖所有边界状况;真实项目开发前还需进一步验证完善逻辑正确性和鲁棒性表现。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值