乘法逆元与费马小定理

费马小定理:

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.线性时间求阶乘的逆元。

自己水平不够,就站抄别人的了

https://blog.csdn.net/yo_bc/article/details/71565988。

猜你喜欢

转载自blog.csdn.net/zttzttzttzt/article/details/81330806