Inverse element

逆元(Inverse Element)

在模运算的范畴中,逆元是一个非常重要的概念。

是整数,且 ,如果存在整数 使得 ,那么称 的逆元,记为

  • 存在条件 的逆元存在当且仅当 ,即 互质。这可以通过扩展欧几里得算法来求解。例如,对于给定的 ,扩展欧几里得算法可以找到整数 ,使得 。当 时, 就是 的逆元(因为 )。

  • 唯一性:在模 的意义下,若 的逆元存在,则逆元是唯一的。也就是说,如果 ,那么

  • 应用场景:逆元在密码学、数论算法以及计算机科学中的模运算计算中有着广泛的应用。例如,在RSA加密算法中,密钥的生成和加密、解密过程都涉及到模逆元的计算。在计算 时,如果 的逆元 已知,那么可以将乘法运算转化为另一种形式,方便计算和处理。

除法同余

在整数的普通运算中,除法是乘法的逆运算。在模运算中,我们可以借助逆元来定义“除法同余” 。

通常,我们想要计算 (这里的“除法”是在模运算意义下的),实际上可以转化为 ,其中 的逆元。

例如,我们要计算 ,首先求 的逆元。因为 ,所以 的逆元是 。那么 就等价于

需要注意的是,只有当 互质时, 的逆元 才存在,此时“除法同余”运算 才有意义。如果 ,那么 在模 的意义下没有逆元,这种形式的“除法” 就不能按照上述方式进行计算 。

  1. 必须保证a/b可以整除,每次有除法的时候,都需要保证绝对能整除
  2. 必须保证M0D是质数,求逆元的原理是费马小定理,要求MOD是质数,比如1000000007
  3. 必须保证b和MOD的最大公约数为1,也就是b和MOD互质
  4. 求逆元的公式是:,也就是b的MOD-2次方取模
int inv_element(int a, int mod){
	return pow(a, mod - 2, mod);	
}