逆元:
当求解公式:(a/b)%m 时,由于b>a时,a/b=0,所以需变除法为乘法:
设c是b的逆元,则有b*c≡1(mod m);
则(a/b)%m = (a/b)1%m = (a/b)bc%m = ac(mod m);
即a/b的模等于a*b的逆元的模;
1.费马小定理
在是素数的情况下,对任意整数都有。
如果无法被整除,则有。
可以在为素数的情况下求出一个数的逆元,,即为逆元。
比如求C(n,m) = n! /(m!(n-m)!) mod 10^9+7
由于除数可能大于被除数,所有需要将除法转换成乘法, 采用逆元的方式。
由于模数为素数, 可以用费马小定理。
n!(m!*(n-m!))^ (10^9+7 - 2)
也就是将x/y mod m 转换成了 x * y ^ (m -2 ) mod m
2.扩展欧几里得
3.通用法
#
a
b
\frac {a}{b}
bamod m = a mod (b*mod) /b