数论练习题
数论配套练习题
该文是我整理的数论毒瘤好题,遇到不熟悉的知识可以查阅这三篇文章:数论上,数论中,数论下。
在后期我可能会陆陆续续添加一些新的好题进来,可以认为是一篇长期更新的文章。
这些题目会相对综合。比较板的题目都在前面三篇文章的例题里面。
考虑到 CF 和 AT 要人机验证,于是放的题目链接都是洛谷的。还有一些神秘联考题可能没有题目链接。
我个人认为有些题其实口糊一下就可以了,不是每个题目都必须要写一遍代码才行的。
P2312 NOIP 2014 提高组 解方程 - 洛谷
先来个诈骗题热身。
题意:已知多项式方程:\(a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\) ,求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) 均为正整数)。
\(0<n\le 100,|a_i|\le 10^{10000},a_n≠0,m<10^6\)。
首先高次方程没有求根公式,只能暴力枚举答案。
第一想法是直接 \(O(nm)\) 枚举,结果发现 \(a_i\) 太大了。
考虑哈希。
直接随便选几个数作为模数,最好是质数或是互质的数,,枚举 \(x\in[1,m]\),如果在取模意义下带入 \(x\) 后,上式都为 \(0\),就认为 \(x\) 合法。
这种取模的思想本质上是 CRT ,也可以认为是哈希。非常的有用。甚至还可以用来卡空间。
P1072 NOIP 2009 提高组 Hankson 的趣味题 - 洛谷
已知正整数 \(a_0,a_1,b_0,b_1\),设某未知正整数 \(x\) 满足:
\(x\) 和 \(a_0\) 的最大公约数是 \(a_1\);
\(x\) 和 \(b_0\) 的最小公倍数是 \(b_1\)。
求出满足条件的 \(x\) 的数量。
\(1 \leq a_0,a_1,b_0,b_1 \leq 2 \times 10^9\) 且 \(n≤2000\)。
数据范围表示可以直接分解质因数,甚至可以直接用加上了剪枝的试除法来分解。
为了方便表示,我们记 \(n\) 分解出来的质因子 \(p\) 有 \(v_p(n)\) 个。
分解了质因数后再看这两个限制:
- \(x\) 和 \(a_0\) 的最大公约数是 \(a_1\)
对每个质因子分开考虑,假设现在在考虑的质因子是 \(p\)。
如果 \(v_p(a_0) < v_p(a_1)\),则 \(v_p(x) = v_p(a_1)\).
如果 \(v_p(a_0) = v_p(a_1)\),则 \(v_p(x) \le v_p(a_1)\).
如果 \(v_p(a_0) > v_p(a_1)\),则无解.
- \(x\) 和 \(b_0\) 的最小公倍数是 \(b_1\)。
是类似的,我懒得写了。
这个题告诉我们,与约数有关的题,分解质因数是一个突破口。
P8255 NOI Online 2022 入门组 数学游戏 - 洛谷
简化题意:对于 \(z=x\times y\times \gcd(x,y)\),已知 \(x,z\) ,求 \(y\),或判断无解。\(x\le1e9,z\le1e18\). 有 \(5e5\) 组数据。
一个初步的想法是:先把 \(z,x\) 因式分解了,观察 \(x\) 和 \(z\) 的每一个分解出来的因数的次数的大小关系,就可以得到 \(y\)。但是因式分解 \(z\) 就已经超时。
更聪明一点的知道还可以多推一下式子。
设:
注意,直接 \(\gcd(x,z')\) 可能不是 \(d\) ,因为 \(x'\) 其实可能有不止一个 \(d\) 这个因子。
这个题告诉我们,与约数有关的题,如果不能分解质因数,可以考虑是否能直接求 \(\gcd\) 再推式子做,因为求 \(\gcd\) 的复杂度远远小于分解质因数的复杂度。
讲个笑话,我代码里面把 \(x^2\) 写成了 x ^ 2 ,调了巨久。
T661221 买买题(muhammad)
题意:给定 \(a,b,p\),求在 \([1,x]\) 中有多少 \(n\),满足:
\[n*a^n\equiv b \pmod p \]\(1\le x\le10^{12},1\le a,b,p \le 10^9,\varphi(p) \le10^7\),保证 \(p\) 与 \(a\) 互质。
注意到 \(\varphi(p)\) 比较小,这启示我们可以对 \(a^n\pmod p\) 取值不同的那些数分别考虑。
于是枚举 \(n\in[0,\varphi(p))\) ,这样 \(a^n\) 这一项就固定了,只用考虑对于固定的 \(n\),有多少个 \(k\) 满足 \((n+k\varphi(p))a^n\equiv b\pmod p\) 即可。
简单整理一下式子有:\(k\varphi(p)\equiv b*a^{\varphi(p)-n}-n\pmod p\) 。
利用可除性的结论,如果有解,可以得到 $k\pmod {{p\over\gcd(\varphi(p),p)}} $ 的唯一解,总共有 \(x - k \over {p\over\gcd(\varphi(p),p)}\) 个。
继续推式子有希望做到 \(O(\log p)\) 。比较麻烦。
这道题启示我们,可以通过枚举某个未知量简化问题。
AT_agc063_d Many CRT - 洛谷
给定正整数 \(N,\ a,\ b,\ c,\ d\)。
请判断是否存在非负整数 \(x\),使得对于所有 \(k=0,1,\ldots,N-1\),都有 \(x\equiv a+kb\pmod{c+kd}\)。如果存在,请输出所有满足条件的 \(x\) 中最小的一个对 \(998244353\) 取模的结果;如果不存在,请输出 \(-1\)。
- \(2\leq N\leq 10^6\),\(1\leq a,b,c,d\leq 10^6\)
瞎口胡一下。
这是一个解特殊的同余方程组的题目。
首先模数不一定互质,所以普通 CRT 有问题。
因为 exCRT 过程中需要一直用 exgcd,这导致无法在过程中让过程量对 \(998244353\) 取模,会爆 long long,我认为可能不太好做。
发现这个相对于普通同余方程,有一定的特殊性质,考虑从这里突破。
解同余方程组时,如果只有模数是不同,其它数都是定值,就会比较好做。考虑转化一下题目给出的式子。
设 \(M=\prod_k (c+kd)\),则此时只用把 \(d\) 除过去就得到了 \(x\)。感觉这一步是小学奥数?
首先根据可除性,把 \(d\) 和 \(M\) 的公因子除掉,这时候顺便还把无解判了,设 \(d\) 去掉除公因子后是 \(d'\),只用把 \(d'\) 的逆元乘过去即可。
求公因子这一步虽然使用欧几里得算法会爆精,但是可以直接使用分解质因数,这是可以接受的。
发现乘逆元这一步其实还不好搞,这一步比较人类智慧:
枚举 \(y\),当满足 \(ad - cb + yM'\) 有 \(d'\) 这个因子的时候,把 \(d'\) 除过去,就能得到 \(x\)。
也就是要求满足 \(ad - cb + yM' \equiv 0 \pmod {b'}\) 的最小的 \(y\),这时候可以先把 \(M'\) 对 \(b'\) 取模,之后得到 \(y\) 是容易的。
这个题告诉我们,同余方程组不一定要用 CRT 来求,也体现出了 exgcd 和 exCRT 无法显性地得到一个答案的表达式这个劣势。
AT_agc050_e Three Traffic Lights
详见:https://www.cnblogs.com/water-flower/p/19249590
P6610 Code+#7 同余方程 - 洛谷
\(n\) 组询问,每组询问给出 \(x,p\) ,统计满足下面这个同余方程的 \(a,b\) 组数。
\[a^2+b^2\equiv x \pmod p \]保证 \(\mu(p) \neq 0\) ,并且 \(p\) 是奇数。\(n\le1e5,x,p\le1e7\)
对 \(p\) 的这个限制暗示我们可以先考虑 \(p\) 是奇素数的情况,然后用 CRT 合并。
然后直接打表瞪出 p 是奇素数时候的结论,而且这个题的结论应该比较好瞪出来(
稍微转化一下题意:令 \(c=a^2,d = b^2\),则 \(c+d \equiv x\),直接对合法 \(c,d\) 进行统计。条件变成 \(c+d \equiv x\) ,并且 \(c,d\) 都是二次剩余或 0。
如果 \(c\) 是二次剩余,那么一个 \(c\) 对应两个 \(a\)。\(d\) 也同理。
这时候,我们可以认为 \(c\) 是二次剩余就照成 2 的贡献,是 0 照成 1 的贡献,不是二次剩余照成 0 的贡献。
然后就可以直接对满足 \(c+d \equiv x\) 这一个条件的 \(c,d\) 把它们的贡献乘起来即可。
发现这个贡献的表达式,恰好就是勒让德符号 \(\left(\dfrac{c}{p}\right)\) + 1!这是一个非常重要的观察。(反正我就是被卡在这里了)
所以一组 \(c,d\) 的贡献就是 \((c^{p-1\over2}\bmod p + 1)(d^{p-1\over 2}\bmod p + 1)\)。(注意模 \(p\) 在括号内部!这只是用欧拉准则在描述贡献!)
答案即为:
接下来就是按照套路化式子了!
根据二次剩余的结论,在 \(p\) 的剩余系中,二次剩余的数量等于非二次剩余的数量,所以 \(\sum_{c=0}^{p-1}c^{p-1\over2}\bmod p=\sum_{c=0}^{p-1}(x-c)^{p-1\over2}\bmod p = 0\),于是第二三个和式就没了。第四个和式等于 \(p\),于是现在只有第一项比较棘手,考虑继续化式子。注意第一项中 c 等于 0 的那项为 0,被提前判掉了,这是为了让后面推导方便。是哪个小可爱一开始搞忘判 0 导致做不出来我不说
一下子变简洁了许多。这里有组合意义证明,但过于不自然,这里不讲。
对于 \(\sum_{c=1}^{p-1}(xc^{-1}-1)^{p-1\over2}\bmod p\),\(c\) 的取值在 \([1, p-1]\) ,根据质数下逆元与数一一对应的性质,\(c^{-1}\in[1,p-1]\),因为 \(p\) 是质数,类似于费马小定理的证明,可知 \(xc^{-1}\in[1,p-1]\) ,所以 \(xc^{-1}-1\in[0,p-2]\)。因为 \(\sum_{c=0}^{p-1}c^{p-1\over2}\bmod p = 0\),容易得到 \(\sum_{c=1}^{p-1}(xc^{-1}-1)^{p-1\over2}\bmod p=0-(p-1)^{p-1\over 2}\bmod p\)。
细心的同学会发现 \(x = 0\) 的时候答案需要特判,是 \((p-1)(-1)^{p-1\over2}\)。
现在对于一个奇素数的答案已经可以 \(O(1)\) 计算了,考虑如何 CRT 合并。
发现根据 CRT 的那个公式,每个奇素数取模意义下,一组合法的 \(a,b\),都一一对应原模数下的一组合法 \(a,b\)。(经典套路)
代码极短。
这个题的剩余系思想,和数论下的计数转贡献的思想非常的牛逼,最后还运用了 CRT 一一对应的性质,好题难得呀。
完结撒花 ~
P4000 斐波那契数列 - 洛谷
题意:求斐波那契数列的第 n 项对 p 取模,但是 \(n\le10^{3e7},p\le2^{31}\).
斐波那契数列通项公式:\(F[n]=\dfrac{\sqrt{5}}{5}\left[\left(\frac{1+\sqrt{5}}{2}\right)^{n}-\left(\frac{1-\sqrt{5}}{2}\right)^{n}\right]\),(详见我生成函数的博客)
首先因为 \(p\) 的剩余系里面总共就 \(p\) 个数,这个题里面, \(5\) 可能没有二次剩余,所有要把 \(\sqrt 5\) 当成虚根,但这样也只有 \(O(p^2)\) 个本质不同的数。这说明 \(\left(\frac{1+\sqrt{5}}{2}\right)^{n}\) 肯定是有循环的,并且循环节大小还与 \(n\) 无关。只要能快速确定循环节大小即可解决问题。
不过如果暴力遍历 \(\left(\frac{1+\sqrt{5}}{2}\right)^{n}\) 形成的环肯定还是爆炸。
这时候出现了两种主流做法:
第一种是根据生日悖论,
根据生日悖论,只要随机撒点,期望只需要 \(\sqrt {\pi(p)}\) 次就找到两个对 \(p\) 取模相同的 \(\left(\frac{1+\sqrt{5}}{2}\right)^{k}\) 两个 \(k\),这里 \(\pi(p)\) 是模 \(p\) 的循环节大小。然后有一个结论是斐波那契数列的循环节大小是 \(O(p)\) 的,证明应该还是得用到第二种方法的推导,不过可以凭借信仰,相信这个循环节并不大。于是直接开个 map,随机化找循环节即可。
第二种是大力推导 p 的循环节关于 p 的公式,
设 \(u = \left(\frac{1+\sqrt{5}}{2}\right)^{n},v=\left(\frac{1-\sqrt{5}}{2}\right)^{n}\).
- \(5\) 在模 \(P\) 意义下有二次剩余
循环节是 \(\varphi(p)\) 因子,不必多说。
- \(P\) 是质数
类似于二次剩余的 cipolla 算法地,可以得到 \((a+bi)^{p+1}\bmod p\) 是实数,那么至少 \((p+1)*\varphi(p)\) 是一个循环节,其实通过进一步的推导得到,\(2p+2\) 也是一个循环节,于是也很好做。
- P 是某个质数 \(p\) 的次幂,也就是 \(p^k\).
这个是最棘手的。
先来个引理,\(a\equiv 1\pmod p \Rightarrow a^{p^k}\equiv 1\pmod {p^{k+1}}\).
考虑数学归纳(呜呜呜,开始耍赖),考虑如何从 \(k\) 推到 \(k + 1\)。
先转成不定方程的形式 \(a^{p^k} = mp^{k+1} + 1\),然后给两边同时 \(p\) 次方。
然后把右边对 \(p^{k+2}\) 取模。
按照套路,把右边二项式展开,然后把有 \(p^{k+2}\) 这个因子的那些项丢掉,然后惊人的发现,只有 \(1\) 这一项还活着。
于是有 \(a^{p^{k+1}} \equiv 1\pmod {p^{k+2}}\)
有了这个以后,\(P\) 的循环节大小就是 \(p\) 的循环节大小的 \(p^{k-1}\) 倍.
- P 的一般情况
直接把 P 分解质因数,对于每一个 \(p_i^{c_i}\),都能得到他的一个循环节,循环节的倍数还是循环节。
于是可以就出每个 \(p_i^{c_i}\) 的循环节长度,然后求 \(lcm\) 即可。
于是搞到了 P 的循环节的一般公式,做完了。
听说有人直接暴力卡常卡过了,挺佩服的。
这个题告诉了你,遇到神秘式子对 p 取模时,该如何得到它的对 p 的循环节,把问题的复杂度降到只与 p 有关。
[P7325 WC2021] 斐波那契 - 洛谷。这个题好像就是本题套上一个模数的可除性。没仔细看,或许是这样的。
CF1190F Tokitsukaze and Powers
简化题意:求满足以下条件的 \(x\) 的数量:
- \(x\in[0,m-1]\)
- \(x\bot m\)
- 不存在 \(e\) 使得 \(p^e\equiv x\pmod m\)
\(p,m\le10^{18}\),保证 \(m\) 是质数的幂。
还要输出 \(n\) 个可行的 \(x\),\(n\le5\times 10^5\)。
如果 \(p,m\) 不互质,那么,根据可除性,第三个限制根本没有用,\(x\) 有 \(\varphi(m)\) 个。
否则,可行的 \(x\) 的数量就是 \(\varphi(m) - \delta_mp\)。
因为 \(m\) 是质数的幂,所以 \(m\) 是非常好分解质因数的,同样, \(\varphi\) 和 \(\delta\) 可以通过 Pollard_Roll 分解质因数来求,所以判无解并不困难。
最大的问题在于如何快速得到一些可行的 \(x\) 。
首先,如果 \(m\) 很小时,比如 \(m\le 10^6\) ,这时候可以直接把所有 \(p^e\bmod m\) 全部跑出来,然后输出剩下那些与 \(m\) 互质的数。
如果 \(m\) 比较大,则还需要分讨一下。
- \(m\) 有原根
先随机化抓一个 \(m\) 的原根 \(g\),再设 \(p \equiv g^a\),于是有:
再假设 \(x\equiv g^k\)。
\(x\) 等于某个 \(p^e\) 当且仅当 \(k\equiv ae\pmod {\varphi(m)}\)。
根据可除性(详见),\(k\) 只要没有 \(\gcd(a,\varphi(p))\) 这个因子即可。
于是随便抓 \(5\times10^5\) 个满足条件的 \(k\),输出 \(g^k\) 即可。
问题在于用 BSGS 求 \(a\) 会 TLE,考虑换个方法。
因为有 \(p^{\delta_mp}\equiv 1\) 和 \(g^{\varphi(m)}\equiv 1\) ,又有 \(\delta_mp \mid \varphi(m)\) 和 \(p\equiv g^a\),于是 \(\varphi(m)\mid a\times\delta_mp\)。
于是 \(a\times\delta_mp = c\times \varphi(m)\)。
取 \(c = 1\),那么 \(\dfrac{\varphi(m)}{\delta_mp}\) 就是一个合法的 \(a\)。
(ps:\(m\) 的原根 \(g\) 有很多个,但是这里的 \(a\) 的表达式竟然与 \(g\) 无关!不过从 \(n\) 此剩余的角度来说,其实解的数量是对得上的,所以不奇怪。这也说明了原根可以用 \(n\) 次剩余解出来)
这一步有一个弱化版:P5605 小 A 与两位神仙 - 洛谷。就是要求计算 \(a\),然后用可除性判一下是否有解即可。
- \(m\) 无原根
也就是说 \(m\) 是 \(2\) 的次幂。
一个重要发现是,如果 \(m > 10^6\) ,合法的 \(x\) 数量远远大于 \(5\times10^5\),所以可以只思考如何找一个 \(x\) 合法的合适的充分条件即可。
可以对 \(p\bmod 4\) 进行分讨。
- \(p\bmod 4 = 1\)
那么 \(p^e\bmod 4 = 1\)。
只抓 \(5\times10^5\) 个 \(x\bmod 4 = 3\) 的 \(x\) 即可。
- \(p\bmod 4 = 3\)
发现 \(p^e\bmod 4\) 是 \(1,3\) 交替的。这一步是最难的。
首先 \(2\) 的次幂是没有原根的。每个数的阶又一定是 \(\varphi(p)\) 的因子,这说明每个数的阶最大只能是 \(\varphi(p)/2\) 。(注意此时偶数没有阶)
然后 \(p^e\bmod 4\) 还 \(1,3\) 交替,所以 \(p^e\bmod 4\) 等于 \(1\) 的最多只有 \(\varphi(p)/4\) 个,也就是最多只包含 \(\bmod 4 = 1\) 这个集合中一半的数量。
打表可以发现,无论 \(m\) 怎么变,\(5\) 的阶永远是 \(\varphi(p)/2\)。要证明这个结论需要升幂引理或数学归纳法。
这说明,对于每个\(\bmod 4 = 1\) 的数,都同余一个 \(5\) 的次幂。
所以可以认为 \(5\) 是一个原根的替代品,再用有原根的方法做即可。
并且用上述方法至少可以求出 \(\varphi(p)/4\) 个合法的 \(x\) 。
完结撒花 ~
余数(来自联考)
做出这个题你数论上这部分就通关啦!
题意:给定 \(k,m\),询问 \(x^k\pmod m\),有多少种不同的取值。\(k,m\) 巨大无比,只给出了 \(k,m\) 的因式分解式,具体来说 \(k,m\) 都有 \(2e5\) 个不大于 \(1e7\) 的因子,每个因子的次幂不大于 \(1e9\)。因为笔者不会做 \(m\) 有 2 的因子的情况,所以 m 没有 2 这个因子。
设 \(x^k\equiv n\pmod m\)。
首先 \(x=0,n=0\) 是一组合法解,这个最后在答案上加 1 即可,现在只求 \(x,n\) 都是正整数的情况。
按照套路分讨 m。
- m 是奇质数
那这就是个普通的 k 次剩余。
找到 m 的原根 g,于是设 \(x=g^a,n=g^b\),于是 \(ak\equiv b\pmod {\varphi(p)}\) ,根据可除性,有 \(\dfrac{\varphi(p)}{\gcd(\varphi(p),k)}\) 个数有解。
- m 是奇质数的幂
设 \(m=p^c\) ,p 是质数。
\(x\) 要么与 \(m\) 互质,要么 \(\gcd(x,m)=p^h,h\le c\),于是考虑枚举这个 \(h\).
设 \(\gcd(x^k,m)= p^d\)。
根据上面的定义容易得到 \(d=\min(kh,c)\).
根据可除性,\(n\) 必须要有 \(p^d\) 这个因子,否则无解。
可以大胆地做个除法,可以得到答案就是满足 \(x^k/p^d\equiv n'\pmod{p^{c-d}}\) 的 \(n'\) 的数量。
假设 \(x=g^a,p^d= g^b,n'=g^e\),于是有 \(g^{ak-b}\equiv g^e\pmod {p^{c-d}}\).
按照套路化式子能得到答案是 \(\varphi(p^{c-d})/\gcd(\varphi(p^{c-d}),k)\)。
写答案的式子:
首先,\(\varphi(p^k)=p^{k-1}(p-1)\),于是继续化式子:
然后因为 \(p^{c-\min(kh,c)-1}\) 与 \(p-1\) 互质(显然),可以把 \(\gcd\) 拆了:
可以预处理出 k 中 p 的因子个数,假设 \(k = a\times p^b\),于是 \(\gcd(p^{c-\min(kh,c)-1},k) = p^{\min(b,c-\min(kh,c)-1)}\)。
然后再把无关项提出来:
这个求和符号里面,前面是一个等差数列,后面跟一段 1,把 min 拆了就可以算。我懒得化式子了。
- m 是二的次幂
题面里说了,我不会推这个的式子,因为 \(2\) 的次幂没有原根。
但是可以打表观察发现,当 \(k\) 是偶数时,答案只是把上面式子里面的 \(p^{c-\min(kh,c)-1}\),全部变成 \(p^{c-\min(kh,c)-2}\) 即可,\(k\) 时奇数答案甚至不变。(这里认为 \(p=2\))
原因尚不明确,疑似需要升幂引理,欢迎大佬给出证明。
- m 是一堆质数幂的乘积(一般情况)
设 \(m=\prod_ip_i^{c_i}\).
在每一个质数幂的合法解里面,各自选一个正整数解 \(n_i\),于是有:
根据中国剩余定理的结论,这些同余方程恰好可以合并出在 \(\bmod \operatorname{lcm}_ip_i^{c_i}\) 的唯一解。这恰好是 \(\bmod m\)。
反过来,一组满足 \(x^k\equiv n\pmod m\) 的合法 \(x,n\) 也恰好对应一个上面的同余方程。
这说明,任意一组 \(n_i\) 合法组合,都恰好对应上一个合法答案。
所以最终答案就是所有质数幂的解的数量乘起来。
被咕掉的题
- [P1069 NOIP 2009 普及组] 细胞分裂 - 洛谷 原因:太简单
- [P6730 WC2020] 猜数游戏 - 洛谷 原因:只有前半段是数论,后面统计答案是一个图计数
小结&后记
数论最大的两个板块时模运算和因数质数,有时可以尝试一下一些小定理。遇到一些题没有思路可以试着打表或分解质因数,或者转成其他板块的知识来解决。
一些常见的 Trick:
- 数论与打表有着密不可分的关系,所以遇到神秘数论题,请不要抗拒打表。例如 T340361 Fermat-2(这是一个比较极端的打表例子,仅供参考),P3951 小凯的疑惑 - 洛谷。
- 先考虑模数是奇质数时怎么做,再考虑奇质数的次幂怎么做,再考虑一堆奇质数乘起来怎么做,再考虑 \(2\) 怎么做,在考虑 \(2\) 的次幂怎么做,最后考虑一般情况。这几步里面,一般来说是有几步很简单,有几步会较为困难,从某一步推到下一步的时候,要找到上一步的方法不能用到这一步的原因,针对这个原因打补丁,也有时候需要换一个做法才走得通,这种时候不要害怕(比如 CRT 到 exCRT,就是直接换了个思路)。最后一步一般是用 CRT 把不同的模数下的值拼起来。这个是非常常见的数论做题思路。例如 P4000 斐波那契数列 - 洛谷。余数(来自联考)P6610 Code+#7 同余方程 - 洛谷。
- 要相信很多东西是有循环节的,最经典的应用就是拓展欧拉定理。但是要注意,有些时候有进入循环以前和循环节这两个部分。例如 P4621 BAKTERIJE - 洛谷,P4000 斐波那契数列 - 洛谷。
- 枚举某一个变量,使其固定,然后统计另一个变量的数量。例如 T661221 买买题(muhammad)。
- 有一个用质数来状压的 Trick,有些时候只关注每个物品的选择次数(如果只有 0/1,应选择二进制装压),而不关心选择的顺序,考虑用一个质数来代表一个物品,用次幂来代表选择次数,这样一个整数就能唯一确定一个状态,一般用 1 代表空集。这时候 \(\gcd\) 与 \(\min,or\) 这种东西比较有关系。
- 有些数论函数具有势能,比如 \(\gcd,\bmod\) 操作每次会导致当前数不变或至少减半;\(\varphi(\varphi(\varphi(...)))\) 这个东西只会嵌套 \(O(\log n)\) 此就会变成 1;\(\mu\) 只要有平方因子出现就会变成 0。
- 可以 dfs 出每个质数的指数。例如 PN 筛。
- 式子推不动了可以考虑转图论或 dp。莫反有时候可以转莫队,
莫莫一家亲。
一些没整理的东西,大多是因为属于非常偏数学的知识,在 OI 中很罕见的。虽然有些 OI 中很没用的东西也可能被我整理进来。比如一些特殊的数(费马数,卡迈克尔数,完全数,梅森数),一些定理(费马大定理),丢番图,连分数,SB 数(SB可能还是有用的,在这里可以看),高斯整数(数论版的虚数),还有一些与平方和有关的东西,升幂引理。
特别强调升幂引理,虽然我没有整理,但是这玩意可以处理从质数到质数的幂这一步,所以是有用的,但是我没学会,所以没有写。

浙公网安备 33010602011771号