首先需要知道 f 是个啥
这里直接给出结论,过程可以看大佬的博客
f(n)=2f(n−1)+f(n−2)
f(0)=0
f(1)=1
这种类似 斐波那契数列的递推式有结论 gcd(f(x),f(y))=f(gcd(x,y)) 通过辗转相减证明
那么一个集合的 gcd 是好求的,所以考虑进行 min−max 容斥
有
lcm(S)=∏T⊂S,T≠∅/gcd(T)(−1)|T|−1
那我们求的就是
∏T⊂S,T≠∅/f(gcd(T))(−1)|T|−1
=n∏d=1f(d)∑T⊂S,T≠∅/[gcd(T)=d](−1)|T|−1
现在只处理角标
∑T⊂S,T≠∅/[gcd(T)=d](−1)|T|−1
=∑T⊂S,T≠∅/∑x|gcd(T)dμ(x)(−1)|T|−1
=∑T⊂S,T≠∅/∑xd|gcd(T)μ(x)(−1)|T|−1
=nd∑x=1μ(x)∑T⊂S‘(−1)|T|−1
其中 s‘ 为 s 中 xd 的倍数除以 xd,即1,2,..nxd
∑T⊂S‘,T≠∅/(−1)|T|−1
=size∑i=1(−1)i+1
=−size∑i=1(−1)i
=1−size∑i=0(−1)i
=1−[T=∅]
那么带回去
nd∑x=1μ(x)∑T⊂S‘(−1)|T|−1
因为 dx<=n 所以S‘非空
=nd∑x=1μ(x)
于是我们要求的变成
=n∏d=1f(d)∑ndx=1μ(x)
考虑 dx<=n 的都会产生贡献,我们枚举 i=dx,式子就是
=n∏i=1∏d|if(id)μ(d)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】