数学相关Alex_Wei
\(O(1)\) 在线逆元
大概就找个乐子。
我们发现,我们如果能找到一个 \(a\),使得 \(ax\bmod p\) 在 \([-O(p^{\frac{2}{3}}),O(p^{\frac{2}{3}})]\) 里面,那么预处理这一部分逆元就行。
考虑将 \(x\) 拆成 \(qB+r\),其中 \(B=q^{\frac{1}{3}}\),\(r\) 是其 \(\bmod B\) 的模数。
我们发现,如果 \(a\leq B\),则 \(ar\leq B^2\),可以接受。因此我们只需要让 \(-B^2\leq aqB\leq B^2\)。
设 \(aqB=v\),考虑所有的 \((a,v)\) 二元组,其中 \(a\leq B,-B^2\leq v\leq B^2\),我们希望证明在这个限制下对于每个 \(q\) 都有解。我们考虑 \(aqB-v\) 的值,如果出现两个相同的,则相减可以得到一组 \((a,v)\),令 \(v>0\) 即可使最后的限制落在 \([-B^2,B^2]\) 之间,所以一定有解。
然后考虑怎么对每个 \(q\) 求出这个 \(a\)。考虑枚举每个 \(a\),将 \(q\) 从 \(0\) 开始每次增加 \(1\),如果 \(aqB\) 没有落在目标区间内,因为 \(aB\) 相对于 \(p\) 来说比较小,所以可以直接找到下一个合法的 \(q\),就可以处理了。
同余方程相关
WC2021 斐波那契
感觉,很深刻啊!
首先设 \(f_i\) 表示斐波那契数列。那么有 \(F_i=f_{i}b+f_{i-1}a\)。令其 \(=0\),则我们需要解一个形如 \(f_ib+f_{i-1}a=0\) 的方程。
打表发现,斐波那契数列在模 \(m\) 意义下循环节长度为 \(O(m)\) 级别的,事实上有证明其 \(\leq 6m\)。
给 \(b\) 取相反数,得到要解 \(f_ib\equiv f_{i-1}a \pmod{m}\)。
如果 \(m\) 是质数那么这题就唐起来了,移项然后求逆元,最后查个表就行。但是这并不是,考虑进行化简。
先除掉 \(\gcd(a,\gcd(b,m))\),这时 \(\gcd(b,m)\) 一定与 \(a\) 互质。我们考虑给两边同时除掉 \(\gcd(b,m)\),则有 \(\gcd(b,m)\mid f_{i-1}\),将 \(f_{i-1}\) 除去之后,再考虑给两边同时除掉 \(\gcd(f_{i-1},m)\)。因为 \(b\) 已经互质,所以有 \(\gcd(f_{i-1},m)\mid f_i\)。但是我们发现,\(f_i\) 与\(f_{i+1}\) 是互质的,证明可以考虑辗转相减,这样的话 \(\gcd(f_{i-1},m)=1\),也就是说在没有除去 \(\gcd(b,m)\) 之前,\(\gcd(f_{i-1},m)=\gcd(b,m)\)。
这样的话我们如果枚举一对 \((f_{i-1},f_i)\),则可以计算出 \(f_if_{i-1}^{-1}\bmod m\) 的值,进而就可以在询问的时候直接查表得到答案。
时间复杂度是因子和乘上一个 \(\log\),因子和据说是 \(O(n\log \log n)\) 级别的,可以通过。
P4621 [COCI2012-2013#6] BAKTERIJE
唐题,发现每个细菌走到陷阱里可以被不超过 \(4\) 个同余方程表示,则 \(4^k\) 枚举每个细菌选了哪个同余方程,然后 exCRT 合并计算最小解即可。复杂度 \(O(nmk+4^k\log T)\),记得某些地方要开 __int128。
莫比乌斯反演相关
[CmdOI2019] 简单的数论题
假设 \(A<B\),发现 \(\frac{\operatorname{lcm}(i,j)}{\gcd(i,j)}\) 相当于选了两个互质的 \(i,j\),恰好 \(\varphi(ij)=\varphi(i)\varphi(j)\) 当 \(\gcd(i,j)=1\) 的时候是成立的,所以就把式子化成:
\(\sum\limits_{idk\leq A}\varphi(ik)\) 太难看了,我们考虑预处理 \(G(n,k)=\sum\limits_{i\leq n}\varphi(ik)\),将原式变成:
现在已经可以 \(O(A\ln A)\) 回答一组询问了,我们考虑进行根号分治,设 \(T=kd\),对于 \(T\) 较小的部分,考虑仍然暴力枚举 \(k,d\),复杂度 \(O(\sqrt n\ln n)\)。对于 \(T\) 较大的部分,\(\frac{A}{T}\) 较小。我们考虑预处理 \(S(i,j,T)=\sum\limits_{d\leq T}\sum\limits_{kd\leq T} G(\frac{A}{T},k)G(\frac{B}{T},k)\)。因为 \(S(i,j,T)\) 的 \(T\leq \frac{A}{\min(i,j)}\),所以总共 \(T\) 的长度之和为 \(n\sqrt n\) 的,预处理复杂度 \(O(n\sqrt n\ln n)\)。总复杂度 \(O((n+q)\sqrt n\ln n)\)。
P5518 [MtOI2019] 幽灵乐团 / 莫比乌斯反演基础练习题
唐题,\(type=0\) 和 \(type=1\) 的部分推推式子就能做,\(type=2\) 的部分推推式子发现就是把 \(type=0\) 外面套个整除分块。预处理复杂度都是 \(O(n\ln n)\),\(type=0,1\) 复杂度是 \(O(T\sqrt n\log n)\),\(type=2\) 是 \(O(Tn^{\frac{3}{4}}\log n)\),\(type=2\) 应该可以通过一些技巧把 \(\log\) 放到 \(n^{\frac{1}{2}}\) 上,但是不想写了(
阶相关
真的好厉害!
记 \(\delta_m(n)\) 表示最小的 \(a\) 使得 \(m^a\equiv 1\pmod n\),这个被称为阶,可以通过不断试除 \(\varphi(m)\) 在 \(O(\log ^2m)\) 时间内求得。
没了。
P5605 小 A 与两位神仙
发现 \(p\) 有原根,记作 \(g\)。若我们求出了 \(x=g^{x'},y=g^{y'}\),则我们相当于要解同余方程 \(x'a\equiv y' \pmod{\varphi(p)}\)。
但有个问题:虽然我们可以求出原根,但是我们并不能很快的求出离散对数。
考虑我们只需要判定,上面那个同余方程的有解要求 \(\gcd(x',\varphi(p))\mid y' \iff\gcd(x',\varphi(p))\mid\gcd(y',\varphi(p))\),如果我们能对于一个 \(x\) 求出 \(\gcd(x',\varphi(p))\),那么这个就是可以判定的。
你仔细思考一下,发现 \(\delta_m(n)=\frac{\varphi(m)}{\gcd(n',\varphi(m))}\),于是你把阶求出来就好了。
理论上需要 pollard-rho,但是好像不用也能过(
[WC2020] 猜数游戏
所以这个题为啥不出 \(O(n\log ^2p)\) 的数据范围(
首先我们发现,如果 \(a_x\) 被选,并且没有一个 \(a_y\) 满足其 pow 可以达到 \(a_x\),那么说明这个数必选。
如果 \(p\) 是质数,那么直接按照上面的方法就可以做到 \(O(n\log ^2p+d(p)\log p)\)。
如果 \(p\) 不是质数,那么发现和 \(p\) 互质的数可以按照上面一样做,如果不互质那么和上面是不影响的,并且每个数 pow \(\log p\) 次就会变成 \(0\),所以可以暴力,复杂度 \(O(n\log p\log n)\)。
群论相关
题目太多了……
大部分题就是给你一个环,然后旋转同构这样子的,需要枚举循环节长度计算不动点个数。
[MtOI2018] 魔力环
枚举循环节长度,然后问题变成计算一个长度为 \(n\) 的环,没有连续 \(k\) 个 \(1\) 相邻的方案数。
枚举头尾有多少个 \(1\) 相连,然后变成链。枚举有多少 \(1\) 的联通块长度 \(> k\),给这些段前面捆一个 \(0\),然后就可以随意放,注意一开始需要一个 \(0\) 和开头的 \(1\) 隔开。
因为至多只有 \(\frac{n}{k}\) 段长度 \(>k\) 的段,所以对于一个 \(n\),计算的复杂度是 \(O(n)\) 的,总复杂度为 \(O(d(n))\),可以看做 \(O(n\log \log n)\)。
二次剩余
引入 勒让得符号 \(\bigg(\dfrac{n}{p}\bigg)\) 表示 \(n\) 是否在模 \(p\) 意义下是二次剩余。在 \(p\) 是奇素数的情况下,
- 当 \(n=0\) 时,\(\bigg(\dfrac{n}{p}\bigg)=0\)
- 当 \(n\) 为二次剩余时,\(\bigg(\dfrac{n}{p}\bigg)=1\)
- 当 \(n\) 不为二次剩余时,\(\bigg(\dfrac{n}{p}\bigg)=-1\)
判定可以使用欧拉准则,即 \(\bigg(\dfrac{n}{p}\bigg)=n^{\frac{p-1}{2}} \bmod p\)。
【模板】二次剩余
随机找一个 \(a\),满足 \(a^2-n\bmod p\) 为非二次剩余,记作 \(w\),感性理解一下,找到这个 \(a\) 的概率为 \(\frac{1}{2}\)。
记单位元 \(i^2=w\),我们考察 \((a+i)^{p+1}\),其等于 \((a+i)(a+i)^p=(a+i)\sum\limits_{j=0}^{p}{p\choose j}a^ji^{p-j}\)。
因为根据 Lucas 定理 \(p\choose j\) 在 \(j\in[1,p-1]\) 的时候为 \(0\),因此上式为 \((a+i)(a^p+i^p)\)。
又因为 \(w\) 为非二次剩余,因此 \(i^{p-1}\bmod p=-1\),上式就等于 \((a+i)(a-i)=a^2-i^2=b\)。
这时候计算 \((a+i)^{\frac{p+1}{2}}\) 就可以得到我们需要的二次剩余了。
Code+#7 同余方程
首先 CRT 拆成奇质数,最后的答案是所有奇质数的乘积。
我们发现实际上勒让得符号架起了一座判定与计数之间的桥梁。\(\bigg(\dfrac{n}{p}\bigg)+1\) 就是 \(n\) 在 \(\bmod p\) 意义下的二次剩余解的个数,因此,我们不妨考虑枚举 \(a+b\equiv x\pmod{p}\),然后计算所有 \((a^{\frac{p-1}{2}}+1)(b^{\frac{p-1}{2}}+1)\) 的值。
拆开之后,因为二次剩余和非二次剩余对半开,就剩下了 \(p+\sum\limits_{a+b\equiv x\pmod p} a^{\frac{p-1}{2}}b^{\frac{p-1}{2}}\)。
特判 \(x=0\)。将 \(b\) 代换回 \(x-a\),就得到 \(\sum\limits_{0\leq a<p}(ax-a^2)^{\frac{p-1}{2}}=\sum\limits_{1\leq a<p}(\frac{x}{a}-1)^{\frac{p-1}{2}}\),发现 \(\frac{x}{a}\) 取遍所有正数,所以只有 \(-1\) 取不到,需要特别计算。
杂题
CF1796F Strange Triples
感觉这个题很厉害啊!评 *2900 是不是有点低了。
我们首先枚举 \(n\) 的位数和 \(b\) 的位数,记作 \(10^{z}\) 和 \(10^x\),那么原式就相当于 \(\frac{a10^z+n}{n10^x+b}=\frac{a}{b}\),把 \(n\) 解出来就是 \(n=\frac{ab(10^z-1)}{a10^x-b}\),有解要求 \(a10^x-b\mid ab(10^z-1)\)。
发现啥都不知道这个东西肯定是不能做的,所以我们考虑枚举一个 \(b\)。设 \(\gcd(a,b)=k\),将两边同时除掉 \(k\) 之后,变成 \(\frac{a}{k}10^x-\frac{b}{k}\mid \frac{a}{k}b(10^z-1)\)。我们发现 \(\gcd(\frac{a}{k},\frac{a}{k}10^x-\frac{b}{k})=1\),那么右边的 \(\frac{a}{k}\) 就可以去掉了。
现在我们发现我们直接枚举 \(b(10^x-1)\) 的复杂度是可以接受的,因为 \(d(x,y)\leq d(x)+d(y)\),因此所有 \(d(b(10^z-1))\) 之和不超过 \(B\ln B\) 乘以所有 \(10^x-1\) 的约数个数和,后面那个的值是 \(155\),因此直接枚举,然后钦定其就是 \(\frac{a}{k}10^x-\frac{b}{k}\)。
这有什么用呢?一个重要的观察是 \(10^x>\frac{b}{k}\),也就是说,\(\frac{a}{k}\) 的值是唯一确定的!然后 \(\frac{b}{k}\) 的值就可以确定了!然后因为我们已经枚举 \(b\) 了,所以 \(k\) 的值可以确定,然后就对完了!
最后记得 check 之前钦定的东西。复杂度 \(O(dB\ln B)\),其中 \(d\leq 155\)。

浙公网安备 33010602011771号