ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

杜教筛

2022-06-04 10:34:47  阅读:113  来源: 互联网

标签:lfloor frac 函数 sum rfloor 杜教


  • 杜教筛是用来在非线性时间内求积性函数的前缀和

前置知识

  • 积性函数(莫比乌斯函数,欧拉函数。。。)

  • 狄利克雷卷积

杜教筛

  • 假设当前要求积性函数的 \(\sum_{i=1}^n f_i\)

  • 那么我们找一个合适的另一个积性函数 \(g\)

\[\begin{aligned} &\sum_{i=1}^n(f*g)(i)\\ =&\sum_{i=1}^n\sum_{d|i}f(d)g(\frac{i}{d})\\ =&\sum_{d=1}^ng(d)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor} f_i\\ =&\sum_{d=1}^ng(d)S(\lfloor\frac{n}{d}\rfloor) \end{aligned} \]

  • 那么 \(g(1)S(n)=\sum_{i=1}^ng(i)S(\lfloor\frac{n}{i}\rfloor)-\sum_{i=2}^ng(i)S(\lfloor\frac{n}{i}\rfloor)\)

  • 那么 \(g(1)S(n)=\sum_{i=1}^n(f*g)(i)-\sum_{i=2}^ng(i)S(\lfloor\frac{n}{i}\rfloor)\)

  • 最后这个式子可以当作一个 公式

  • 所以现在就需要找到一个合适的积性函数 \(g\) 使得可以快速的求出这两个部分,后面的部分可以用数论分块优化,前面的部分一般可以 \(O(1)\) 算

  • 那么一般的复杂度就是 \(O(n^{\frac{3}{4}})\) ,如果预处理出长度为 \(n^{\frac{2}{3}}\) 的前缀和,那么可以证明复杂度为 \(O(n^{\frac{2}{3}})\)

  • 还有的优化就是在递归的时候记忆化

  • P4213 【模板】杜教筛(Sum)

  • 代码

P3768 简单的数学题

  • 首先转换成 \(\sum_{x=1}^nx^3\sum_{d=1}^{\lfloor\frac{n}{x}\rfloor}\mu(d)d^2g(\frac{n}{dx}),g(x)=(\frac{(1+x)x}{2})^2\)

  • 这里有个套路,设 \(T=dx\) ,把 \(g\) 提前

  • 因为我们需要构造出我们熟悉的数论函数,所以这个和 \(\mu\) 函数连在一起的分块结构必须分离

  • \(\sum_{T=1}^n g(\lfloor\frac{n}{T}\rfloor)\times T^2\sum_{d|T}\mu(T)(\frac{T}{d})\)

  • 将后面的一坨看成 \(f(x)\) ,那么就是 \(\sum_{T=1}^n g(..)\times f(T)\)

  • 前面的部分可以用数论分块优化,后面的 \(f\) 考虑用非线性的杜教筛

  • 对于 \(f(x)=x^2\sum_{d|x}\mu(x)(\frac{x}{d})=x^2\varphi(x)\)

  • 考虑找一个积性函数,最好将 \(\varphi\) 变成 \(\operatorname{id}\) ,所以需要先将 \(x^2\) 消掉,设 \(h(x)=x^2\)

  • 那么 \((f\cdot h)(x)=x^2\sum_{d|x}\varphi(d)=x^3\)

  • 那么就可以直接套杜教筛,\(S(n)=\sum_{i=1}^ni^3-\sum_{i=2}^ni^2S(\lfloor\frac{n}{i}\rfloor)\)

  • \(\sum_{i=1}^n i^3=\frac{n^2(n+1)^2}{4}\) ,\(\sum_{i=1}^n i^2=\frac{n(n+1)(2n+1)}{6}\) ,那么整体的复杂度就可以做到 \(n^{\frac{2}{3}}\)

  • 虽然外层套了层数论分块,但是我们记忆化了,最后只会有 \(\sqrt n\) 个点值会被算到,所以整体的复杂度在里面的杜教筛,所以可以看成 \(O(\sqrt n + n^\frac{2}{3})\)

标签:lfloor,frac,函数,sum,rfloor,杜教
来源: https://www.cnblogs.com/kzos/p/16341338.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有