2023.5.30 闲话

推歌:世界は可愛く出来ている

东方兽王园的灵梦新曲,还挺可爱的 .


看 PinkRabbit 数论课件有这个建立递归关系的 Trick(什么,你的课件都是从小学数学讲到 NOI 的吗).

问题:计算 i=1nμ(i)[ik] .

F(n,k)=i=1nμ(i)[ik],则可以建立递归关系:

F(n,k)=i=1n[ik]μ(i)=i=1nμ(i)dgcd(i,k)μ(d)=dkμ(d)i=1ndμ(id)=dkμ(d)i=1ndμ(i)μ(d)[id]=dkμ(d)2F(nd,d)

那么递归即可 . 有用的 d 肯定是 square-free 的,那么只有 2ω(d) 种 .

可以看成 DAG 上 1n 所有路径点权积之和,而只有 1 的点权和 n 有关 . 所以如果 k 不变的话,可以处理出 F(k,k) 之后 Θ(1) 得到别的位置的答案 .

推广路线 1:使用完全一致的推导过程,不过 μ 改成了 φ(其中 φ11φ(x),不是 Dirichlet 卷积逆):

F(n,k)=i=1nφ(i)gcd(i,k)φ(gcd(i,k))=i=1nφ(i)dgcd(i,k)(φ1μ)(d)=dk(φ1μ)(d)i=1ndφ(di)=dkφ(d)(φ1μ)(d)i=1ndφ(i)gcd(i,d)φ(gcd(i,d))=dkφ(d)(φ1μ)(d)F(nd,d)

推广路线 2:改成二维的:

F(n,m,k)=i=1nj=1m[ij][jk]=i=1n[ij]j=1mdgcd(j,k)μ(d)=i=1ndkμ(d)j=1md[ijd]=dkμ(d)i=1nj=1md[ij][id]=dkμ(d)F(md,n,d)

(感觉这个推导非常科幻……怎么想出来这么厉害的东西的)

应用:NOI2016 循环之美(其实就是推广路线 2).

题解(大众解法)

假设 n,m 同阶 .

额首先既约既约分数 xyk 进制下纯循环当且仅当 yk .

因为如果循环节长度是 c 那么肯定有 xxkc(mody),又因为 xy 那么就是 kc1(mody),所以只有 yk 的时候才有满足条件的 c,这样就证明了结论 .

于是答案就是 i=1nj=1m[ij][jk],化简一下:

i=1nj=1m[ij][jk]=i=1m[ik]j=1n[ij]=d=1min{n,m}[dk]μ(d)i=1ndi=1md[jk]=d=1min{n,m}[dk]μ(d)ndj=1md[jk]

那么整除分块后就是要求:

f(n,k)=i=1n[ik]g(n,k)=i=1n[ik]μ(i)

分别看一下:

f(n,k)=i=1n[ik]=i=1n[imodkk]=nkf(k,k)+f(nmodk,k)g(n,k)=i=1n[ik]μ(i)=i=1nμ(i)dgcd(i,k)μ(d)=dkμ(d)i=1ndμ(id)=dkμ(d)i=1ndμ(i)μ(d)[id]=dkμ(d)2g(nd,d)

这样对于 f 来说因为 k2000 所以预处理出小的 f 之后就能算了 .

对于 g 来说暴力记忆化递归算,因为外层有整除分块所以复杂度不太好分析 . 毛估估一下的话如果光看递归树大小涉及到的不同状态的数量是 O(ω(k)n) 级别的,底层 k=1 的块筛部分用杜教筛的话时间复杂度就是 O(n2/3) . 那么可以得到一个时间复杂度的上界是 O(ω(k)logn+n2/3) .

那么整合一下的话时间复杂度就是 O(k+n2/3+ω(k)logn),可以通过 .
(我写的没有那么精细,算 gO(n2/3+klogn) 的也过了)

感觉也不是很麻烦为什么最后渲染出来这么长

posted @   yspm  阅读(124)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
😅​
点击右上角即可分享
微信分享提示