小学一波数论

费马小定理

\(p\) 为素数,\(\gcd(a, p) = 1\),则 \(a^{p - 1} \equiv 1 \pmod{p}\)

另一个形式:对于任意整数 \(a\),有 \(a^p \equiv a \pmod{p}\)

证明

设一个质数为 \(p\),我们取一个不为 \(p\) 倍数的数 \(a\)

构造一个序列:\(A=\{1,2,3\dots,p-1\}\),这个序列有着这样一个性质:

\[ \prod_{i=1}^{n}\space A_i\equiv\prod_{i=1}^{n} (A_i\times a) \pmod p \]

证明:

\[ \because gcd(A_i,p)=1,gcd(A_i\times a,p)=1 \]

又因为每一个 \(A_i\times a \pmod p\) 都是独一无二的,且 \(A_i\times a \pmod p < p\)

得证(每一个 \(A_i\times a\) 都对应了一个 \(A_i\))

\(f=(p-1)!\), 则 \(f\equiv a\times A_1\times a\times A_2\times a \times A_3 \dots \times A_{p-1} \pmod p\)

\[ a^{p-1}\times f \equiv f \pmod p \\ a^{p-1} \equiv 1 \pmod p \]

证毕。

欧拉定理

欧拉定理实际上就是费马小定理的推广,欧拉定理的内容如下。

\(\gcd(a, m) = 1\),则 \(a^{\varphi(m)} \equiv 1 \pmod{m}\)

至于这个证明么,有点复杂,不细讲了(实则也不会)。可以说,费马小定理撑起了很多东西,比如我们经常算的逆元,或者是经典非对称加密 RSA 都有用到费马小定理。

逆元

这个概念是抽象代数里面的,定义代数中的二元运算 * 和有限集 G ,若 \(a*b∈G(a∈G,b∈G)\) 则,群 \(<G,*>\) 是一个关系代数。

代数中,有一个很重要的概念就是幺元 ,幺元是指与任意数进行关系运算结果都等于那个数,比如在加法运算中,0就是幺元,因为0加任何数都等于任何数嘛。在乘法中,1就是幺元,同样1乘任何数也等于任何数。而逆元就是说两个数相互进行关系运算之后得到幺元,那么这两个数就互称为对方的逆元。

而我们平时算法竞赛研究的代数体系通常是乘法取模运算,它其实跟乘法类似,就多个取模,取模也限定了它集合的有限性。在乘法模运算中,我们不难发现1是幺元。所以若 \(b\)\(a\) 在模 \(m\) 意义下的逆元,则有 \(a\times b \equiv 1 \pmod p\)。而这个1我们稍微用一下费马小定理,把它变成 \(a^{p-1}\),那么整个式子就变成了 \(b\equiv a^{p-2}\ (mod\ p)\)。我们就能已知其中一个数算出另一个数的逆元了,至于幂运算可以使用快速幂解决,那么我们算一个数的逆元的复杂度就是 \(O(log_2p)\) 了。