仅洛谷上做过的一些数论题
????最大公约数

缘分

对于两个数\(a,b\),若使\(\text{lcm}(a,b)\)较大,根据\(a\times b=\text{lcm}(a,b)\times \text{gcd}(a,b)\),那么就应使\(a\times b\)较大,\(\text{gcd}(a,b)\)较小。考虑选择\(n\)\(n-1\)两个数,此时乘积最大,且两个数必然互质,则\(\text{lcm}\)也越大。

\(\\\)

最大公约数和最小公倍数问题

根据\(a\times b=\text{lcm}(a,b)\times \text{gcd}(a,b)\),考虑枚举\(\sqrt {a\times b}\)内的每个数,检查\(\text{lcm}(i,\frac{a\times b}{i})\)是否等于\(b\),且\(\text{gcd}(i,\frac{a\times b}{i})\)是否等于\(a\)

\(\\\)

又是毕业季II

\(n\)个数中选\(k\)个,使这\(k\)个数的\(\text{gcd}\)最大化。

与其枚举组合,不如转化思路,考虑记录\(n\)个数的所有因数出现的次数。当前求\(k\)个数的最大公约数,就是求出现了\(k\)次的因数中最大的一个。根据贪心思想,数的个数越多,gcd越小,从大到小处理选\(n\)个数到选\(1\)个数的情况即可。

\(\\\)

SuperGCD

高精是不可能写的????‍????,python水过。

\(\\\)

Hankson的趣味题

结论:若\(\text{gcd}(a,b)=k\),则\(\text{gcd}(\frac{a}{k},\frac{b}{k})=1\)

应用结论:

\(gcd(x,a_0)=a_1\Rightarrow gcd(\frac{x}{a_1},\frac{a_0}{a_1})=1\)

\(lcm(x,b_0)=b_1\)\(gcd(x,b_0)=\frac{x\times b_0}{b_1}\Rightarrow gcd(\frac{b_1}{b_0},\frac{b_1}{x})=1\)

需保证\(\frac{x}{a_1}\)\(\frac{b_1}{x}\)为整数,则\(x\)位于\([a_1,b_1]\)之间,且为\(a_1\)的倍数,\(b_1\)的因数。

枚举\(b_1\)的约数,检查是否满足条件即可。

\(\\\)

\(\\\)

\(\\\)

????质数与合数

质因数分解

因数总是成对出现,从\(1\)\(\sqrt n\)枚举因数,若\(n\%i==0\),那么输出\(\frac{n}{i}\)

\(\\\)

角色属性树

存储每个节点的权值和父亲。然后一直向上跳父亲,直到当前节点的权值与给定节点权值的gcd不为1。最坏时间复杂度为\(O(nk)\),但是数据随机,有梦想就可以过。

\(\\\)

小道消息

伯特兰—切比雪夫定理

\(\forall n>1\),至少存在一个质数\(p\),符合\(n<p<2n\)

对于这道题来说,假定一开始选定的数为\(k\)

\(k\)为质数,

\(\frac{n}{2}<k<n\),那么只需要一次

首先由于\(k\)为质数,那么在\([1,k]\)中的数与\(k\)互质。

\(\frac{n}{2}<k\),那么在\([k+1,n]\)中的数,没有\(k\)的倍数,与\(k\)互质。

​ 若\(k\le \frac{n}{2}\),那么需要两次。

\([\frac{n}{2},n]\)中,一定存在一个质数\(p\),且由于\(k\)也为质数,\(p,k\)一定互质,那么在第一天\(p\)会被标记,(第一种情况),第二天所有数会被标记。

\(k\)为合数,

\([\frac{n}{2},n]\)中,一定存在一个质数\(p\),且由于\(k<n\)\(k\)不是\(p\)的倍数,\(p,k\)一定互质,那么第一天\(p\)会被标记,第二天所有数会被标记。

\(\\\)

\(\\\)

\(\\\)

????欧拉函数

仪仗队

观察到图像是对称的,可以只考虑\(x<y\)的一半。

将左下角的点看成是\((0,0)\),那么只有\(gcd(x,y)=1\)的点不会被遮挡,发现满足条件的点的数量即为\(\varphi(y)\)

\(\\\)

GCD

$\sum\limits_{i=1}{n}\sum\limits_{j=1}{n}gcd(i,j)=p\ \((\)p$为质数)

\(gcd(x,y)=k\Rightarrow gcd(\frac{x}{k},\frac{y}{k})=1\)

枚举每个质数\(p\),则\(\sum\limits_{i=1}^{\lfloor \frac{n}{p}\rfloor}\sum\limits_{j=1}^{\lfloor \frac{n}{p}\rfloor}gcd(i,j)=1\)

对于\(i<j\),使得\(gcd(i,j)=1\)\(i\)的个数为\(\varphi(j)\)

则总个数为\(2\times \varphi(j) -1\)

\(\\\)

GCD SUM

考虑\(gcd\)一定为\(\le n\)的数,枚举\(\le n\)的每个数\(d\),求出\(gcd(i,j)=d\)的个数\(t\),转化为\(gcd(\frac{i}{d},\frac{j}{d})\)的个数,则答案为\(\sum_{d=1}^{n}t_d\)

\(\\\)

上帝与集合的正确用法

扩展欧拉定理

递归求解,边界为\(mod==1\),return \(0\)

\(\\\)\(\\\)

\(\\\)

\(\\\)

????同余方程

裴蜀定理

将裴蜀定理推广到\(n\)个数上,\(a_1x_1+a_2x_2+…+a_nx_n=S\)有解的条件为\(gcd(a_1,a_2,…,a_n)|S\)

最小解即为\(gcd(a_1,a_2,…,a_n)\)

\(\\\)

有理数取余

\(\frac{a}{b}\%c\)的值即为求解\(a\%c\times b^{-1}(mod\ c)\)

\(\\\)

同余方程

求逆元,最小整数解为\((x+b)\%b\)

\(\\\)

小凯的疑惑

\(a,b\)两个数不能表示出的最小整数为\(a\times b-a-b\)

\(\\\)

青蛙的约会

列出方程\(km+x\equiv kn+y(mod\ l)\),求解最小的\(k\)

转化为\(km+x+lq=kn+y\)

\((m-n)k+lq=y-x\)

exgcd(m-n,l,k,q)

\(k=(k_0\times\frac{y-x}{gcd}+\frac{l}{gcd})\%\frac{l}{gcd}\)

impossible:\(gcd(m-n,l)\nmid y-x\)

注意当\(m-n<0\)时,转化为正数,不然求出来的\(gcd(m-n,l)\)为负数,求出的\(k\)也为负数。

\(\\\)

\(\\\)

\(\\\)

????中国剩余定理

猜数字

\(x\equiv a_i(mod\ b_i)\)

板子题

\(\\\)

古代猪文

\(g^{\sum d|n\ C_n^{d}}\ mod\ 999911659\)

由于\(999911659\)为质数,由欧拉定理得\(a^n\equiv a^{n\%\varphi(p)}\ (mod\ p ,gcd(n,p)=1)\)

\(g^{\sum d|n\ C_n^{d}}\ mod\ 999911658\Rightarrow g^{\sum d|n\ C_n^{d}\%999911659}\ mod\ 999911659\)

考虑如何计算\(\sum d|n\ C_n^{d}\%999911658\)

考虑\(\text{Lucas}\)定理,记\(p=999911658\),$ C_n^{d}%p\Rightarrow C_{\lfloor n/p\rfloor}^{\lfloor d/p\rfloor}\times C_{\lfloor n%p\rfloor}^{\lfloor d%p\rfloor}%p\(,应用\)\text{exLucas}\(的复杂度是\)O(p\log_pn)\(,但是\)p$太大了,直接应用肯定会TLE。

一个小技巧是,先把模数p分解质因数,缩小模数p的范围,对于每个质因数应用Lucas定理,再用中国剩余定理合并。

对于这道题来说,将\(999911658\)进行质因数分解,\(99991165=2\times3\times4679\times35617\)

求出\(\sum d|n\ C_n^{d}\)\(2,3,4679,35617\)应用\(\text{Lucas}\)定理的结果,记为\(a_1,a_2,a_3,a_4\)

\(\begin{cases} x\equiv a_1 \ mod\ 2\\ x\equiv a_2 \ mod\ 3\\ x\equiv a_3 \ mod\ 4679\\ x\equiv a_4 \ mod\ 35617 \end{cases}\)

用中国剩余定理求解\(x\)即可。