数论入门与进阶---GCD、ExGcd、CRT、ExCRT、逆元、素数

先把之前的搬过来,逆元 exgcd 数论分块 同余方程 crt excrt 欧拉定理 扩展欧拉定理 费马小定理 快速幂 威尔逊定理 卢卡斯定理 扩展卢卡斯定理 BSGS 逆元 O(1)求逆元两种方法 二次剩余之类的还没学 素数判定 各种筛法 积性函数 素数 Miller-Rabin Pollard-Rho 质因数分解 后面还要补莫比乌斯反演以及复杂筛法还有类欧 矩阵乘法优化递推 生成函数

Gcd

辗转相除法证明:
https://www.cnblogs.com/tanhehe/archive/2013/02/22/2921526.html
\(gcd(a,b)=gcd(b,a \mod b)\)
\(a<b\)时可以调换\(a,b\)顺序,转化为\(a>b\)
\(a=b\)\(gcd(a,b)=b=gcd(b,0)=gcd(b,a\mod b)\)
\(a>b\)
\(a \mod b=r\)
\(a=kb+r\)
\(r=a-kb\)
\(a=sd,b=td\)
\(d\)\(a\)\(b\)的最大公约数
\(r=sd-ktd=d(s-kt)\)
\(gcd(b,r)=gcd(td,d(s-kt))\)
证明\(t\)\(s-kt\)互质,用反证法
假设不互质,则设\(t=lp,s-kt=jp\)
\((p>1)\)
\(s=kt+jp=lpk+jp=p(lk+j)\)
\(a=pd(lk+j)\)
\(b=lpd\)
那么\(a\)\(b\)的最大公约数至少为\(pd\),这与前面推理矛盾,故\(t\)\(s-kt\)互质
所以\(gcd(b,r)=gcd(a,b)=gcd(b,a\mod b)\)
同样可以推广到\(n\)个数(从小到大递增),
就是\(gcd(a_1,a_2\mod a_1,a_3\mod a_2,…,a_n\mod a_{n-1})\)


更相减损之术证明:

\(gcd(a,b)=gcd(a,b-a)(a<=b)\)
\(gcd(a,b)\)
分类讨论:
\(a=b\)
\(gcd(a,b)=a=gcd(a,0)=gcd(a,a-a)=gcd(a,b-a)\)
\(a<b\)时,设\(a=sd,b=td\)(\(s,t\)是正整数,\(d\)为它们最大公约数)
因为\(d\)为它们最大公约数,所以\(s\)\(t\)最大公因数为\(1\),即\(s\)\(t\)互质
\(gcd(a,b)=gcd(sd,td)=d\)
\(gcd(a,b-a)=gcd(sd,td-sd)=gcd(sd,d(t-s))\)
如果命题成立,则\(s\)\(t-s\)互质
所以要证明命题成立就要证明\(s\)\(t-s\)互质
\(a<b\)
\(sd<td\)
\(sd-td<0\)
\(d(s-t)<0\)
因为\(d\)不为\(0\)
所以
\(s-t<0\)
\(t-s>0\)

反证法,假设\(s\)\(t-s\)不互质
则可以设\(s=lk,t-s=jk\)
\((k>1)\)


\(t=jk+s\)
\(=jk+lk\)
\(=(j+l)k\)
因为\(k>1\),所以\(s\)\(t\)不互质,这与上面推理矛盾,故\(s\)\(t-s\)互质,所以\(gcd(sd,d(t-s))=d\)
所以\(gcd(a,b)=gcd(a,b-a)\)
\(a>b\)时交换\(a\)\(b\)的位置,命题也成立

对于多个数\(gcd(a_1,a_2,…,a_x)\)假设从小到大排序
对于三个数
\(gcd(x,y,z)=gcd(x,gcd(y,z))=gcd(x,gcd(y,z-y))=gcd(x,y,z-y)=gcd(gcd(x,y),z-y)=gcd(x,y-x,z-y)\)
所以
\(gcd(a_1,a_2,…,a_x)=gcd(a_1,a_2-a_1,a_3-a_2,…,a_n-a_{n-1})\)

扩展欧拉定理与欧拉定理 以及费马小定理

欧拉定理

如果\(a\) \(p\)互质
那么 \(a^{(phi(p))}===1 \mod p\)
===代表同余

扩展欧拉定理

\(a\) \(p\) 互质

\(a^b===a^{(b \mod phi(p) ) } \mod p\)
否则
\(a^b===a^{(b \mod phi(p)+phi(p) )} \mod p\)

当然要求\(b>=phi(p)\)
否则不一定正确
,当然也没意义

矩阵的幂运算不满足扩展欧拉定理

费马小定理

\(p\)是质数

那么

\(a^p===a \mod p\)
若还满足\(a\) \(p\)互质


\(a^{(p−1)}===1 \mod p\)


欧拉函数经过\(log(n)\)次迭代下降到\(1\)

来自 https://www.cnblogs.com/war1111/p/13984053.html

证明:
\(p\)为质数
\(phi(p)\)\(p-1\),是偶数,\(2\)不考虑
\(p\)为偶数
则至少有\(p/2\)个数和\(p\)不互质
\(p\)为奇数但不是质数
那么
\(phi(p)=n∗∏▒(p_i−1)/p_i\)
\(p_i-1\)是偶数
\(n*p_i-1\)是偶数
\(p_i\)是奇数
偶数除奇数还是偶数

威尔逊定理

\(p\)是质数

\((p−1)!===−1 \mod p\)


\((p−1)!===p−1 \mod p\)

lucas定理

\(p\)是质数

\(C(n,m)=C(n \mod p,m \mod p)∗C(n/p,m/p)\)

其中除法向下取整

它的应用是高效计算组合数对\(p\)取模,由于直接定义计算组合数的话需要逆元,而有可能\(n\)\(m\)都大于\(p\)且是\(p\)的倍数使得没有逆元,而这个定理可以把\(n\) \(m\)都缩到\(p\)以内,可以预处理阶乘的逆元,\(O(p+Tlogn)\),如果不想预处理,可以直接费马小定理算逆元,\(O(Tlognlogp)\)

拉格朗日插值

就是\(y_i* ((x-x_j)/(x_i-x_j)的积且j!=i)\)的和(对\(i\)求和)

\(n\)次多项式需要\(n+1\)个点

如果连续\(1~n+1\)的值
那么可以\(O(n)\)插值
预处理\(x-i\)的除第\(i\)项积,然后\(1~n+1\)的阶乘,当然还要预处理逆元,然后注意正负\((i-j<0)\)

筛法求一般的积性函数

需要高效计算\(f(p^k)\)\(p\)是质数,这样可以使用线性筛

线性筛过程中,如果\(i\)是质数,直接计算,如果要筛\(i*prime[j]\),则\(prime[j]\)是该数的最小质因子,而i一定已经筛过了,如果\(i \mod prime[j]!=0\),那么\(i\)中不含\(prime[j]\)因子,\(i\)\(prime[j]\)互质,可以直接计算,如果\(i\mod prime[j]==0\),prime【j】是\(i*prime[j]\)的最小质因子,也就是说i的最小质因子也是\(prime[j]\),那么额外记录一个数组\(g\),表示\(i\)的最小质因子的乘积,那么\(g[i]*prime[j]\)\(i/g[i]\)互质,且\(g[i]*prime[j]\)是质数的幂,可以直接计算

posted @ 2026-01-24 15:42  sakrain  阅读(42)  评论(0)    收藏  举报