数论
整理下学过的数论知识
逆元
满足\(a\times x\equiv 1\pmod p\) 则x为a在模p意义下的逆元 也就是\(a^{-1}\)
线性求逆元:
令 \(p = k\times i + r\)
即\(k\times i+r\equiv 0\pmod p\)
两边同乘\(i^{-1}\times r^{-1}\)
则有\(k\times r^{-1} + i^{-1} \equiv 0\)
移项 得\(i^{-1} \equiv -k\times r^{-1}\)
所以\(i^{-1} \equiv -\frac{p}{i} \times (p\% i)^{-1}\)
费马小定理求逆元
\(a^{p-1} \equiv 1 \pmod p\)
前提:a与p互质 且 p为素数
所以要求a的逆元用快速幂去求\(a^{p-1}\) 就可以了
证明:
引理1: 若\(a*b \equiv a*c \pmod p\) 且\((a,p) = 1\) 则有\(b \equiv c \pmod p\)
证明:
\(a*b \equiv a*c \pmod p\)
\(a*b - a * c \equiv 0 \pmod p\)
\(a*(b-c) \equiv 0 \pmod p\)
因为\((a,p) = 1\)
所以\(b-c \equiv 0 \pmod p\)
\(b \equiv c \pmod p\)
引理2: 若mod为大于1的整数,\((m,b) = 1\) ,a[1],a[2]...,a[m]为模m的一个完全剩余系 则有\(b*a[1],b*a[2],b*a[3]...b*a[m]\) 也为模m的一个完全剩余系
证明:
反证,假设有\(b*a[1]\equiv b*a[2] \pmod p\),则有引理1知\(a[1] \equiv a[2]\) ,与定义冲突,故假设不成立
由以上两引理:
构造p的完全剩余系 \(1,2,3...,p-1\)
因为\((a,p)=1\)
所以\(a,2a,3a,4a...,(p-1)*a\) 也是p的完全剩余系
由完全剩余系性质:
\(1*2*3...*(p-1) \equiv a * 2a * 3a... *(p-1)a\)
即\((p-1)! \equiv a^{p-1}*(p-1)! \pmod p\)
又因为p为素数
所以\((p-1)!\)可以直接消掉
故\(a^{p-1} \equiv 1 \pmod p\)
欧拉函数通项公式
首先证明若\(n = p^k\) 则\(\varphi(n) = p^k-p^{k-1}, p\in prime\)
显然有除了\(p^i\),其它项都与\(p^k\)互质
所以原式成立
对于任一整数,求\(\varphi(n) = n * \prod(1-\frac{1}{p})\)
首先一定可以把n分解为\(n = \prod p_i^{k_i}\)
假定A,B是与m,n,mn互质的数集, 那么A*B 与 C满足一一对应的关系 (中国剩余定理
那么显然有\(\varphi(n) = \prod p^k - p^{k-1}\)
把所有\(p^k\)提出 得到
\(\varphi(n) = n \prod (1 - \frac{1}{p})\)
gcd
关于辗转相除正确性证明
也就是证明\((a,b) = (b,a\% b)\)
令\((a,b) = d,a = b*k+r\)
\((b,b* k+r) = d\)
则有\(d|a,d|{a*k+r}\)
故\(d|r\)
又\(r=a \% b\)
所以\((r,b) = d\) 原式得证
exgcd
求解\(ax+by = gcd(a,b)\)
则相当于求解\(bx+a\% b *y = gcd(b,a\%b)\)
对于这个式子显然可以一直递归 递归到\(b=0\)的时候有\(x=1,y=0\)
那么考虑如何回代,即由当前层求出上一层的\(x,y\)
\(ax+by = gcd(a,b) = gcd(b,a\%b) = bx' + a\%b * y'\)
那么有\(ax+by = bx'+a\%b * y'\)
\(bx' + a\%b * y' = bx' + (a-\frac{a}{b}*b )* y'\)
\(ax + by = ay' + b(x'-\frac{a}{b} * y)\)
\(x = y' , y = (x'-\frac{a}{b}* y)\)
然后一直回代就可以求解了
CRT
求解方程组
\(x \equiv a_1 \pmod {m_1}\)
\(x \equiv a_2 \pmod {m_2}\)
\(x \equiv a_3 \pmod {m_3}\)
\(x \equiv a_4 \pmod {m_4}\)
...
\(x \equiv a_i \pmod {m_i}\)
满足\(m_i\)与\(m_j\) 互质(\(i!=j\))
首先把所有\(m\)乘起来为Mod
然后依次去跑每一个方程
求解方程\(\frac{Mod}{m_i}*x \equiv a_i \pmod {m_i}\) 并将此时的\(\frac{Mod}{m_i}*x\) 作为该方程的解
考虑这个方程的解具有什么性质
因为\(Mod\) 是所有模数乘起来得到的 所以当前解一定模其它任一膜数都为0
此时它满足要求的原方程的解的性质
有一个很显然的公式是\(a + b \equiv c \pmod P\)
如果\(a\% P = 0\)
那么有\(b \%P = c\)
所以把所有方程的解加在一起正好满足所有方程
令最后的答案\(\%\)掉\(Mod\) 得到最小解