首页 > 其他分享 >杜教筛学习笔记

杜教筛学习笔记

时间:2024-04-13 09:11:22浏览次数:14  
标签:lfloor frac 函数 sum 笔记 杜教 学习 rfloor

杜教筛学习笔记

杜教筛被用于求解某一数论函数 \(f\) 的前缀和,即对于形如 \(S(n)=\sum_{i=1}^nf(i)\) 形式的函数 \(S\),杜教筛能够在小于线性复杂度的复杂度内求解。

算法思想

尝试构造一个函数 \(S\) 的递推式。选择一个数论函数 \(g\),那么根据狄利克雷卷积可以得到:

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

那么接着我们就可以简单的推得:

\[\begin{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)\\&=\sum_{i=1}^n(f*g)(i)-\sum_{i=2}^ng(i)S(\lfloor\frac{n}{i}\rfloor)\end{aligned} \]

不难看出,只需要能够快速求解 \(\sum_{i=1}^n(f*g)(i)\) 和 \(\sum_{i=2}^ng(i)S(\lfloor\frac{n}{i}\rfloor)\),就可以快速求出 \(g(1)S(n)\),也能够快速求得 \(S(n)\)。

事实上,不论 \(f\) 是否是积性函数,只要构造出的函数 \(g\) 能够满足上面的

时间复杂度

在不能预处理的情况下,杜教筛的复杂度是 \(O(n^{\frac{3}{4}})\) 的。

而在可以进行预处理的情况下,进行前 \(n^{\frac{2}{3}}\) 个数的预处理能够让时间复杂度降至 \(O(n^{\frac{2}{3}})\)。

更加值得注意的是,上述时间复杂度全部建立在记忆化的基础上,因此需要采用 mapunordered_map 进行存储。

常见积性函数及其卷积形式

\[\varepsilon=\mu*1\\ d=1*1\\ \sigma=\text{id}*1\\ \varphi=d*\text{id} \]

其中,\(\varepsilon\) 单位函数,\(1\) 是常函数,\(d\) 是因子函数,\(\sigma\) 是除数函数,\(\text{id}\) 是恒等函数。

代码实现

下面以 \(\mu\) 函数的杜教筛为实例代码。那么所求 \(S(n)=\sum_{i=1}^n\mu(i)\)。

不妨令 \(g=1\),所以:

\[\begin{aligned}g(1)S(n)&=S(n)\\&=\sum_{i=1}^{n}(\mu*1)(i)-\sum_{i=2}^{n}g(i)S(\lfloor\frac{n}{i}\rfloor)\\&=\sum_{i=1}^n\varepsilon(i)-\sum_{i=2}^n{S(\lfloor\frac{n}{i}\rfloor)}\\&=1-\sum_{i=2}^{n}S(\lfloor\frac{n}{i}\rfloor)\end{aligned} \]

不难看出后半部分可以用数论分块求解。

int cnt;
int p[N+5],mu[N+5];
bool vis[N+5];
unordered_map<int,ll>sum_mu;

void EulerS(){
    mu[1]=1;
    for(int i=2;i<=N;i++){
        if(!vis[i]){
            p[++cnt]=i;
            mu[i]=-1;
        }
        for(int j=1;p[j]<=N/i;j++){
            vis[i*p[j]]=true;
            if(i%p[j]==0){
                mu[i*p[j]]=0;
                break;
            }
            mu[i*p[j]]=-mu[i];
        }
    }
    for(int i=1;i<=N;i++)mu[i]+=mu[i-1];
    return ;
}//线性筛预处理

ll SumMu(ll n){
    if(n<=N)return mu[n];//线性筛预处理出的答案可以不用求解
    if(sum_mu[n])return sum_mu[n];//之前求解过的答案可以不用求解
    ll res=1;
    for(ll l=2,r;l<=n;l=r+1){
        r=n/(n/l);
        res-=SumMu(n/l)*(r-l+1);
    }//求解前缀和
    return sum_mu[n]=res;//记忆化剪枝
}

标签:lfloor,frac,函数,sum,笔记,杜教,学习,rfloor
From: https://www.cnblogs.com/DycBlog/p/18132495

相关文章

  • 读所罗门的密码笔记18_大宪章
    1. 大宪章1.1. 1215年会议开启了一个艰难的谈判过程,充满了紧张和对权力与道德权威的争夺1.1.1. 这部宪章会赋予各方一系列的权力,对国王的自由裁量权进行制衡1.2. 《大宪章》还需要300多年的时间和多次迭代,才能成为财产权、公平税收、司法程序和政府最高法律的参考文件1.3......
  • C++ Prime 学习
    C++利用using语句:其一:指定别名点击查看代码intp[4][4]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};for(int(*i)[4]=p;i!=p+4;i++){ for(int*j=*i;j!=*i+4;j++){ cout<<*j<<endl; }}利用using之后点击查看代码<summary>点击查看代码</su......
  • SeleniumBase 制作WEB用户使用导览,并导出 JS-使用笔记(三)
    自动化福音(爬虫、办公、测试等)SeleniumBase使用笔记(三)SeleniumBase制作WEB用户使用导览,并导出JSSeleniumBase包含强大的JS代码生成器,用于将Python转换为JavaScript,而制作用户导览,就是其中的应用之一,用户导览能将SaaS产品采用率提高10倍或更多目录创建导览......
  • 2023 国庆 清北学堂笔记
    2023国庆QBXT未完结,勿喷Day0被GSS6卡了一整天/kkDay1挂大分膜你赛125pts原因是T1100pts->50pts被卡常力啊啊啊啊其实也不是被卡常了我写的\(\mathcal{O(n^3\logn)}\)然而标算\(\mathcal{O(n^3)}\)但有人\(\mathcal{O(n^4)}\)也过去......
  • 2023 暑假 正睿笔记
    Day1"基础"数据结构并查集每次合并集合,就在两个点之间连上边,询问就是看两个点是否在同一连通块但是朴素的并查集复杂度没有保证所以考虑优化路径压缩改变树的结构不会改变它的连通性我们考虑为什么我们之前复杂度会退化很重要一个原因就是有可能路径太长所以我们把......
  • 数据分享|R语言机器学习预测案例合集:众筹平台、机票折扣、糖尿病患者、员工满意度
    全文链接:https://tecdat.cn/?p=35835原文出处:拓端数据部落公众号分析师:YujieZhou,WeixinHu,XiaoyanXu,XuTian在数据驱动的当代社会,机器学习已成为揭示复杂现象、预测未来趋势的重要工具。特别是在商业决策、健康管理、交通出行等多个领域,机器学习技术的应用日益广泛。本文集合......
  • 两周攻克初中阅读理解A篇:我的英语学习逆袭之路
    【导语】初三以来,英语成绩一直让我倍感焦虑。看着与同学们的分数差距越来越大,我意识到必须采取有效的学习方法来提高自己的英语水平。在这篇文章中,我将分享我是如何在短短两周内攻克初中阅读理解A篇的,希望能为同样面临英语学习困境的你提供一些启示。【正文】1焦虑中的觉醒自......
  • 筛法学习笔记
    埃氏筛枚举质数\(p_i\),每次去除所有是\(p_i\)倍数的数,总效率大概是\(O(n\log\logn)\)。int_prm=0,prm[M];boolisprm[M];voidGet_phi(intn){ for(inti=2;i<=n;i++){ if(isprm[i])continue; prm[++_prm]=i; for(intj=i*i;j<=n;j+=i)isprm[j]=1; }}值......
  • 莫队学习笔记
    目录普通莫队初遇——从暴力谈起困境——乱跑的指针优化——顺路而为之带修莫队参考资料普通莫队初遇——从暴力谈起我们通过一道例题来讨论普通莫队。题目链接。观察数据范围,一个很直接的想法是:开一个数组\(cnt\),\(cnt_i\)表示在询问的区间内数字\(i\)出现的次数。对于......
  • 深度学习-nlp-NLP之sequence2sequence--73
    目录1.sequence2sequence任务特点2.编码器与解码器参考:https://zhuanlan.zhihu.com/p/38816145sequence2sequence模型发展到今天,根据不同任务有着不同的变体。了解了最基本的框架之后,再看别的模型就没有太大问题了。1.sequence2sequence任务特点输入输出时不定长的。比......