费马小定理:
当p为质数时pow(n,p-1)%p=1;
在求解a/b%m时,可以转化为(a%(b*m))/b,转化过程如下
令k = (a/b)/m(向下取整), x = (a/b)%m;
a/b = k*m + x (x < m);
a = k*b*m + b*x;
a%(b*m) = b*x;
a%(b*m)/b = x;
乘法逆元:
[ a/b%m = (a%(b*m))/b%m ]
所有的除法取模问题都可以用这种方法,但是当b很大的时候,则会出现爆精度问题,所以引出乘法逆元,将除法取模转换为乘法取模。
b存在乘法逆元的充要条件是b与模数m互质。设令c为b在mod m时的的逆元,即b*c ≡ 1(mod m);
解释:满足同余方程,b*c和1对m的模数相同,即b*c对m取余为1(m > 1);
那么 a/b = (a/b)*1 = (a/b)*(b*c)(mod m) = a*c(mod m);
即,除以一个数对m取模等于乘以这个数的逆元对m取模;
三种求逆元的方法&:
1.逆元求解利用扩欧。
2.当m为质数的时候直接使用费马小定理,m非质数时使用欧拉函数。
3.当m为质数的时候,使用神奇的线性方法。
扩展&:
1.利用乘法逆元求解组合数及组合数的其它求法。
2.线性时间求阶乘的逆元。
自己水平不够,就站抄别人的了