乘法逆元

乘法逆元就是,在模p意义下,除以一个数等于乘这个数的逆元。(自定义解释)

乘法逆元有线性求法,下面进行推导。

a ∗ i + k = p a*i+k=p ai+k=p则有
a ∗ i + k ≡ p m o d    p a*i+k≡p \mod p ai+kpmodp
也即:
a ∗ i + k ≡ 0 m o d    p a*i+k≡0 \mod p ai+k0modp
向两边同时除以i*k,也就是乘上i的逆元和k的逆元:
a ∗ k − 1 + i − 1 ≡ 0 m o d    p a*k^{-1}+i^{-1}≡0\mod p ak1+i10modp
a和k都可以用i和p表示,将a和k表示出来后得(除法表示整除):
( p / i ) ∗ ( p % i ) − 1 + i − 1 ≡ 0 m o d    p (p/i)*(p \% i)^{-1}+i^{-1}≡0\mod p (p/i)(p%i)1+i10modp
整理可得:
i − 1 ≡ − ( p / i ) ∗ ( p % i ) − 1 ≡ 0 m o d    p i^{-1}≡-(p/i)*(p\%i)^{-1}≡0\mod p i1(p/i)(p%i)10modp
用代码表示得:

inv[i]=((long long)p-(long long)inv[p%i]*((long long)p/(long long)i)%(long long)p)%(long long)p;

这里为了防止溢出,随处加了longlong,并且为了方便,将每个乘法逆元都变成正数。

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页