费马小定理
内容:当p为质数,且gcd(a, p)=1
,那么$ a^{p-1}equiv 1 (mod p ) $
证明:
构造出素数p的既约剩余系(最小公约数为1)
(P=) { (1,2,3, ··· ,p-1) }
因为(a, p)=1,所以A也是一个既约剩余系
$ A=$ { (a, 2a, 3a, ··· ,(p-1)a) }
因为A在mod p
意义下把余数全取到了,所以
$ 1 imes 2 imes 3 imes ··· imes (p-1)equiv a imes 2a imes 3a imes ··· imes a(p-1) (mod p ) $
即
$ (p-1)! equiv (p-1)! a^{p-1} ( mod p ) $
因为$ ( (p-1)!, p )=1 $
所以
$ a^{p-1}equiv 1 (mod p ) $
当遇到求$ a/b mod p $(p为质数)
时,因为除法不能分开mod
,所以要变成
$ a imes b^{-1} mod p $
运用费马小定理再变
$ a imes (b{p-1})b{-1} mod p $
$ a imes b^{p-2} mod p $
不过,好麻烦啊
无聊时逛了wck的博客,看到他看到了vfk的神奇代码:(此处转载代码)
rfact[1] = 1;
for (int x = 2; x <= n; x++)
rfact[x] = (s64)rfact[Mod % x] * (Mod - Mod / x) % Mod;
rfact[i]
是1/i mod p
,称为i
的逆元
证明:
设$ p=kx+b, k=left lfloor frac{p}{x}
ight
floor, b=p mod x $,要求rfact[x]
.
(ecause pequiv kx+b (mod p ))
$ herefore xpequiv kx+b (mod p ) $
$ frac{p}{b}equiv frac{k}{b}+frac{1}{x} (mod p ) $
$ frac{1}{x} equiv frac{p-k}{b}(mod p ) $
所以递推就可以把逆元全求出来。
告别快速幂。
PS:
好像发现了一些问题……
这里的Mod
一定要是质数,否则会有错。
如果Mod
不是质数,那么只能用扩展欧几里得。
(rfact[x] equiv frac{1}{x} (mod p))
(x cdot rfact[x] - kp= 1)
扩展欧几里得可求。