费马小定理(新方法)
费马小定理
内容:当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 \times 2 \times 3 \times ··· \times (p-1)\equiv a \times 2a \times 3a \times ··· \times 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 \times b^{-1} \mod p $
运用费马小定理再变
$ a \times (b{p-1})b \mod p $
$ a \times 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} \right \rfloor, b=p \mod x $,要求rfact[x]
.
\(\because p\equiv kx+b (\mod p )\)
$ \therefore xp\equiv 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\)
扩展欧几里得可求。