杜教筛
是求一个数论函数f的前缀和,令其为S
我们考虑构造一个数论函数g,根据 狄利克雷卷积
n∑i=1(f∗g)(i)=n∑i=1∑d∣ig(d)f(id)=n∑i=1g(i)S(⌊ni⌋)
可以推出
g(1)S(n)=n∑i=1g(i)S(⌊ni⌋)−n∑i=2g(i)S(⌊ni⌋)=n∑i=1(f∗g)(i)−n∑i=2g(i)S(⌊ni⌋)
所以我们只需快速求出g和(f∗g)的前缀和,就可以快速求出S
然后时间复杂度不会证明,但直接打是O(n34),预处理前O(n23)位前缀和是O(n23)
预处理+外面套上数论分块也是O(n23)
难点就是构造g函数,所以学习一下数论函数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探