ICode9

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

杜教筛

2022-02-07 08:31:13  阅读:146  来源: 互联网

标签:lfloor right frac sum rfloor 杜教 left


又在抄 oi-wiki...

\[\phi(n)=\sum_i^n \varphi(i) \]

利用 \(id=\varphi * 1\):

\[\begin{aligned} \frac{1}{2}n(n+1)&=\sum_k^n k \\ &=\sum_k^n\sum_{d|k}\varphi(\frac{k}{d}) \\ &=\sum_d^n\sum_{1\leq k\leq n,d|k}\varphi(\frac{k}{d}) \\ &=\sum_d^n\sum_k^{\left\lfloor\frac{n}{d}\right\rfloor}\varphi(k) \\ &=\sum_d^n\phi(\left\lfloor\frac{n}{d}\right\rfloor) \end{aligned} \]

注意到当 \(d=1\) 的时候就是我们想要的 \(\phi(n)\)

即:\(\phi(n)=\frac{1}{2}n(n+1)-\sum_{d\geq 2}\phi(\left\lfloor\frac{n}{d}\right\rfloor)\)

记忆化搜索即可,可证算法复杂度为 \(\mathcal{O}(n^{2/3})\).

一般化

欲求 \(f\) 的前缀和 \(F\),构造出 \(F(n)\) 关于 \(F(\left\lfloor\frac{n}{d}\right\rfloor)\) 的递推式。

\[\begin{aligned} \sum_i \sum_{d|i}g(d)f(\frac{i}{d})=\sum_{i}g(i)F(\left\lfloor\frac{n}{i}\right\rfloor) \\ \Longleftrightarrow \sum_i(f\ast g)(i)=g(1)F(n)+\sum_{i>1}g(i)F(\left\lfloor\frac{n}{i}\right\rfloor) \end{aligned} \]

若能快速求得 \(f\ast g\) 的前缀和以及 \(g\),则可以整除分块来求 \(F(n)\).

试试看!

求 \(\sum_{i=1}^n\mu(i)\) 的值,其中 \(n\leq 2^{31}-1\).

利用 \(\mu \ast 1=\epsilon\) 即可。

标签:lfloor,right,frac,sum,rfloor,杜教,left
来源: https://www.cnblogs.com/do-while-true/p/15866875.html

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

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

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

ICode9版权所有