乘法逆元(对于质数模数的乘法逆元)

2019-04-13 14:20发布

逆元是什么

  • 设S为一有二元运算 * 的集合。若e为(S,*)的单位元且a*b=e,则a称为b的左逆元素且b称为a的右逆元素。若一元素x同时是y的左逆元素和右逆元素时,x称为y的两面逆元素或简称为逆元素。S内的一有两面逆元素的元素被称为在S内为可逆的。
  • 直观地说,它是一个可以取消另一给定元素运算的元素。

乘法逆元

  • 也就是说,对于一个乘法运算b,它的乘法逆元就是它的倒数 b1

分数取模

  • 然而在很多题目中,数据都是十分大的,所以题目经常会出现”答案模Ha”,就是对Ha取模,这里Ha一般是个质数,比如说最常见的 109+7 ( 1000000007 ),此时,要是答案是个分数,那该怎么办呢?答案就是要用到分数取模的方法。
  • 先把内容写出来,下面再证明:
当gcd(b,Ha)==1时(其实就是 b 和 Ha 互质) ab1abHa2 (mod Ha)
这里的”≡”是同余符号,意思是左边那个和右边那个除以最后括号里的Ha的余数相同。
这样我们要求a/b模Ha的值时,就不会不知所措,只需求出 abHa2 模Ha的值就行了。

证明

这个的证明需要用到费马小定理,费马小定理就先不证了,可以百度或看其它的博文。
费马小定理:
  • 假如p是质数,且gcd(a,p)=1,那么 ap1 ≡ 1 (mod p)
  • 即:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。
gcd(b,Ha)==1那么我们就可以做一下推导(此处模数都为Ha,就不打上去了):
bHa1 ≡ 1
bHa2b1
abHa2ab1
第二行是第一行两边同乘 b1 得到的
这样,分数取模我们就学会了。

注意

要注意几点:
* Ha必须是质数
* b与Ha要互质