O(1) 在线逆元
模板题
大概就找个乐子。
我们发现,我们如果能找到一个 a,使得 axmodp 在 [−O(p23),O(p23)] 里面,那么预处理这一部分逆元就行。
考虑将 x 拆成 qB+r,其中 B=q13,r 是其 modB 的模数。
我们发现,如果 a≤B,则 ar≤B2,可以接受。因此我们只需要让 −B2≤aqB≤B2。
设 aqB=v,考虑所有的 (a,v) 二元组,其中 a≤B,−B2≤v≤B2,我们希望证明在这个限制下对于每个 q 都有解。我们考虑 aqB−v 的值,如果出现两个相同的,则相减可以得到一组 (a,v),令 v>0 即可使最后的限制落在 [−B2,B2] 之间,所以一定有解。
然后考虑怎么对每个 q 求出这个 a。考虑枚举每个 a,将 q 从 0 开始每次增加 1,如果 aqB 没有落在目标区间内,因为 aB 相对于 p 来说比较小,所以可以直接找到下一个合法的 q,就可以处理了。
同余方程相关
感觉,很深刻啊!
首先设 fi 表示斐波那契数列。那么有 Fi=fib+fi−1a。令其 =0,则我们需要解一个形如 fib+fi−1a=0 的方程。
打表发现,斐波那契数列在模 m 意义下循环节长度为 O(m) 级别的,事实上有证明其 ≤6m。
给 b 取相反数,得到要解 fib≡fi−1a(modm)。
如果 m 是质数那么这题就唐起来了,移项然后求逆元,最后查个表就行。但是这并不是,考虑进行化简。
先除掉 gcd(a,gcd(b,m)),这时 gcd(b,m) 一定与 a 互质。我们考虑给两边同时除掉 gcd(b,m),则有 gcd(b,m)∣fi−1,将 fi−1 除去之后,再考虑给两边同时除掉 gcd(fi−1,m)。因为 b 已经互质,所以有 gcd(fi−1,m)∣fi。但是我们发现,fi 与fi+1 是互质的,证明可以考虑辗转相减,这样的话 gcd(fi−1,m)=1,也就是说在没有除去 gcd(b,m) 之前,gcd(fi−1,m)=gcd(b,m)。
这样的话我们如果枚举一对 (fi−1,fi),则可以计算出 fif−1i−1modm 的值,进而就可以在询问的时候直接查表得到答案。
时间复杂度是因子和乘上一个 log,因子和据说是 O(nloglogn) 级别的,可以通过。
submission
唐题,发现每个细菌走到陷阱里可以被不超过 4 个同余方程表示,则 4k 枚举每个细菌选了哪个同余方程,然后 exCRT 合并计算最小解即可。复杂度 O(nmk+4klogT),记得某些地方要开 __int128。
submission
莫比乌斯反演相关
假设 A<B,发现 lcm(i,j)gcd(i,j) 相当于选了两个互质的 i,j,恰好 φ(ij)=φ(i)φ(j) 当 gcd(i,j)=1 的时候是成立的,所以就把式子化成:
∑d≤A∑id≤A∑jd≤Bφ(i)φ(j)[gcd(i,j)=1]=∑d≤A∑kd≤Aμ(k)∑idk≤A∑jdk≤Bφ(ik)φ(jk)
∑idk≤Aφ(ik) 太难看了,我们考虑预处理 G(n,k)=∑i≤nφ(ik),将原式变成:
∑d≤A∑kd≤Aμ(k)G(Akd,k)G(Bkd,k)
现在已经可以 O(AlnA) 回答一组询问了,我们考虑进行根号分治,设 T=kd,对于 T 较小的部分,考虑仍然暴力枚举 k,d,复杂度 O(√nlnn)。对于 T 较大的部分,AT 较小。我们考虑预处理 S(i,j,T)=∑d≤T∑kd≤TG(AT,k)G(BT,k)。因为 S(i,j,T) 的 T≤Amin(i,j),所以总共 T 的长度之和为 n√n 的,预处理复杂度 O(n√nlnn)。总复杂度 O((n+q)√nlnn)。
submission
唐题,type=0 和 type=1 的部分推推式子就能做,type=2 的部分推推式子发现就是把 type=0 外面套个整除分块。预处理复杂度都是 O(nlnn),type=0,1 复杂度是 O(T√nlogn),type=2 是 O(Tn34logn),type=2 应该可以通过一些技巧把 log 放到 n12 上,但是不想写了(
submission
阶相关
真的好厉害!
记 δm(n) 表示最小的 a 使得 ma≡1(modn),这个被称为阶,可以通过不断试除 φ(m) 在 O(log2m) 时间内求得。
没了。
发现 p 有原根,记作 g。若我们求出了 x=gx′,y=gy′,则我们相当于要解同余方程 x′a≡y′(modφ(p))。
但有个问题:虽然我们可以求出原根,但是我们并不能很快的求出离散对数。
考虑我们只需要判定,上面那个同余方程的有解要求 gcd(x′,φ(p))∣y′⟺gcd(x′,φ(p))∣gcd(y′,φ(p)),如果我们能对于一个 x 求出 gcd(x′,φ(p)),那么这个就是可以判定的。
你仔细思考一下,发现 δm(n)=φ(m)gcd(n′,φ(m)),于是你把阶求出来就好了。
理论上需要 pollard-rho,但是好像不用也能过(
submission
所以这个题为啥不出 O(nlog2p) 的数据范围(
首先我们发现,如果 ax 被选,并且没有一个 ay 满足其 pow 可以达到 ax,那么说明这个数必选。
如果 p 是质数,那么直接按照上面的方法就可以做到 O(nlog2p+d(p)logp)。
如果 p 不是质数,那么发现和 p 互质的数可以按照上面一样做,如果不互质那么和上面是不影响的,并且每个数 pow logp 次就会变成 0,所以可以暴力,复杂度 O(nlogplogn)。
submission
群论相关
题目太多了……
大部分题就是给你一个环,然后旋转同构这样子的,需要枚举循环节长度计算不动点个数。
枚举循环节长度,然后问题变成计算一个长度为 n 的环,没有连续 k 个 1 相邻的方案数。
枚举头尾有多少个 1 相连,然后变成链。枚举有多少 1 的联通块长度 >k,给这些段前面捆一个 0,然后就可以随意放,注意一开始需要一个 0 和开头的 1 隔开。
因为至多只有 nk 段长度 >k 的段,所以对于一个 n,计算的复杂度是 O(n) 的,总复杂度为 O(d(n)),可以看做 O(nloglogn)。
二次剩余
引入 勒让得符号 (np) 表示 n 是否在模 p 意义下是二次剩余。在 p 是奇素数的情况下,
- 当 n=0 时,(np)=0
- 当 n 为二次剩余时,(np)=1
- 当 n 不为二次剩余时,(np)=−1
判定可以使用欧拉准则,即 (np)=np−12modp。
随机找一个 a,满足 a2−nmodp 为非二次剩余,记作 w,感性理解一下,找到这个 a 的概率为 12。
记单位元 i2=w,我们考察 (a+i)p+1,其等于 (a+i)(a+i)p=(a+i)p∑j=0(pj)ajip−j。
因为根据 Lucas 定理 (pj) 在 j∈[1,p−1] 的时候为 0,因此上式为 (a+i)(ap+ip)。
又因为 w 为非二次剩余,因此 ip−1modp=−1,上式就等于 (a+i)(a−i)=a2−i2=b。
这时候计算 (a+i)p+12 就可以得到我们需要的二次剩余了。
submission
首先 CRT 拆成奇质数,最后的答案是所有奇质数的乘积。
我们发现实际上勒让得符号架起了一座判定与计数之间的桥梁。(np)+1 就是 n 在 modp 意义下的二次剩余解的个数,因此,我们不妨考虑枚举 a+b≡x(modp),然后计算所有 (ap−12+1)(bp−12+1) 的值。
拆开之后,因为二次剩余和非二次剩余对半开,就剩下了 p+∑a+b≡x(modp)ap−12bp−12。
特判 x=0。将 b 代换回 x−a,就得到 ∑0≤a<p(ax−a2)p−12=∑1≤a<p(xa−1)p−12,发现 xa 取遍所有正数,所以只有 −1 取不到,需要特别计算。
submission
杂题
感觉这个题很厉害啊!评 *2900 是不是有点低了。
我们首先枚举 n 的位数和 b 的位数,记作 10z 和 10x,那么原式就相当于 a10z+nn10x+b=ab,把 n 解出来就是 n=ab(10z−1)a10x−b,有解要求 a10x−b∣ab(10z−1)。
发现啥都不知道这个东西肯定是不能做的,所以我们考虑枚举一个 b。设 gcd(a,b)=k,将两边同时除掉 k 之后,变成 ak10x−bk∣akb(10z−1)。我们发现 gcd(ak,ak10x−bk)=1,那么右边的 ak 就可以去掉了。
现在我们发现我们直接枚举 b(10x−1) 的复杂度是可以接受的,因为 d(x,y)≤d(x)+d(y),因此所有 d(b(10z−1)) 之和不超过 BlnB 乘以所有 10x−1 的约数个数和,后面那个的值是 155,因此直接枚举,然后钦定其就是 ak10x−bk。
这有什么用呢?一个重要的观察是 10x>bk,也就是说,ak 的值是唯一确定的!然后 bk 的值就可以确定了!然后因为我们已经枚举 b 了,所以 k 的值可以确定,然后就对完了!
最后记得 check 之前钦定的东西。复杂度 O(dBlnB),其中 d≤155。
submission
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2022-02-28 luogu P2664 树上游戏
2022-02-28 luogu P7516 [省选联考 2021 A/B 卷] 图函数
2022-02-28 luogu P2150 [NOI2015] 寿司晚宴