整除分块学习笔记

整除分块学习笔记

前言

最近在学习 莫比乌斯反演 ,好像要用到一个小小的知识点: 整除分块

所以为了让大家都能更好地学习莫比乌斯反演,我来水一篇博客

那么正片开始。

整除分块

现在要求一下式子
f ( n ) = ∑ i = 1 n ⌊ n i ⌋ f(n) = \sum_{i = 1}^n ⌊\frac{n}{i}⌋ f(n)=i=1nin
很明显能 O ( n ) O(n) O(n)

但是有的时候因为多组数据,可能 O ( n ) O(n) O(n) 并不是正确的时间复杂度。那么这个时候就要用到 O ( n ) O(\sqrt n) O(n )整除分块 了!

对于每一个 ⌊ n i ⌋ ⌊\frac{n}{i}⌋ in 我们可以通过 打表 理性证明可以发现:有一些 ⌊ n i ⌋ ⌊\frac{n}{i}⌋ in 的值都是一样的并且都是连在一起的。

设: d = ⌊ n i ⌋ d = ⌊\frac{n}{i}⌋ d=in 然后每一块的左端点就是 ⌊ n d + 1 ⌋ + 1 ⌊\frac{n}{d+1}⌋ +1 d+1n+1 ,右端点是 ⌊ n d ⌋ ⌊\frac{n}{d}⌋ dn

code

int solve(int n){
    int ans=0;
    for(int l=1,r;l<=n;l=r+1){
        r=n/(n/l);//计算出与l相同值的区间的右端点
        ans+=(r-l+1)*f(n/l);
    }
}

后记

感觉杜教筛好恶心啊!!!

posted @   2020fengziyang  阅读(4)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示