数论学习笔记2之杜教筛初探(含例题练习)

Posted cqust_qilin02811

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数论学习笔记2之杜教筛初探(含例题练习)相关的知识,希望对你有一定的参考价值。

杜教筛



前言

实际上本次例题涉及的杜教筛不麻烦,麻烦的是例题的式子的推导与变换,后续更新其他例题,陆续更新博客内容~


涉及前置知识点:线性筛求积性函数,整除分块,积性函数的性质,狄利克雷卷积

一、前置知识

0.初等数论基础

整除、质数、约数、算术基本定理,详见博客:数论学习笔记-初等数论基础

1.杜教筛解决什么问题?

解决积性函数求前缀和的问题,它可以在非线性时间内求积性函数前缀和。为什么要使用杜教筛?不能用线性筛筛积性函数吗?
答:线性筛只适用于1e8以下的求积性函数前缀和问题,因为复杂度是O(n),而当n>1e9时,就会超时,而杜教筛可以解决n = 1e11的积性函数求前缀和问题,杜教筛算法的时间复杂度是 O ( n 2 3 ) O(n^\\frac 2 3) O(n32)

2. 积性函数与线性筛求积性函数

积性函数:对于任意互质的整数 a,b有 f(a×b)=f(a)×f(b)的数论函数。

完全积性函数:对于任意整数 a,ba,b 有 f(a×b)=f(a)×f(b)的数论函数。

常见的积性函数:
μ , φ , ϵ , i d , I , δ , d μ : 莫 比 乌 斯 函 数 φ : 欧 拉 函 数 ϵ : 单 位 元 函 数 i d : 单 位 函 数 I : 恒 等 函 数 δ : 约 数 和 函 数 d : 约 数 个 数 函 数 , 也 叫 除 数 函 数 \\mu,\\varphi,\\epsilon,id,I,\\delta,d\\\\ \\mu:莫比乌斯函数\\\\ \\varphi:欧拉函数\\\\ \\epsilon:单位元函数\\\\ id:单位函数\\\\ I:恒等函数\\\\ \\delta:约数和函数\\\\ d:约数个数函数,也叫除数函数 μ,φ,ϵ,id,I,δ,dμ:φ:ϵid:I:δ:d:
线性筛求积性函数详见博客:数论学习笔记之积性函数与筛法求积性函数

3.狄利克雷卷积

​狄利克雷卷积满足交换律和结合律

结合狄利克雷卷积得到的几个积性函数之间性质:
μ ∗ I = ϵ ∗ I = I ∗ I = d φ ∗ I = i d ∗ I = δ \\mu*I = \\epsilon*I = I*I = d\\\\ \\varphi*I = id*I = \\delta μI=ϵI=II=dφI=idI=δ

4.整除分块

详情见另一篇博客:整除分块笔记1

二、杜教筛

1.式子推导

这里给出杜教筛的式子推导:
令 h = f ∗ g , g 为 要 求 的 函 数 适 用 条 件 , 如 果 ∑ i = 1 n h ( i ) 好 求 , ∑ i = 1 n f ( i ) 也 好 求 那 么 ∑ i = 1 n g ( i ) 就 好 求 。 令 H ( n ) = ∑ i = 1 n h ( i ) = ∑ i = 1 n ( f ∗ g ) ( i ) 令 S ( n ) = ∑ i = 1 n g ( i ) ( 1 ) 根 据 迪 利 克 雷 卷 积 定 义 : 有 H ( n ) = ∑ i = 1 n ( f ∗ g ) ( i ) = ∑ i = 1 n ∑ d ∣ i f ( d ) g ( i d ) = ∑ i = 1 n ∑ d = 1 n f ( d ) g ( i d ) [ d ∣ i ] , 再 令 i = i 1 d , = ∑ d = 1 n ∑ i 1 d = 1 n f ( d ) g ( i 1 d d ) [ d ∣ i 1 d ] = ∑ d = 1 n ∑ i 1 d = 1 n f ( d ) g ( i 1 ) = ∑ d = 1 n ∑ i = 1 n d f ( d ) g ( i ) = ∑ d = 1 n f ( d ) ∑ i = 1 n d g ( i ) = ∑ d = 1 n f ( d ) S ( n d ) 取 出 第 1 项 , ( 为 什 么 取 第 1 项 ? ) 则 有 H ( n ) = f ( 1 ) S ( n ) + ∑ d = 2 n f ( d ) S ( n d ) f ( 1 ) S ( n ) = H ( n ) − ∑ d = 2 n f ( d ) S ( n d ) S ( n ) = H ( n ) − ∑ d = 2 n f ( d ) S ( n d ) f ( 1 ) 这 里 S ( n ) 就 得 到 了 , 后 面 的 式 子 可 以 整 除 分 块 求 。 \\beginaligned &令h = f*g,g为要求的函数\\\\ &适用条件,如果\\sum_i=1^nh(i)好求,\\sum_i=1^nf(i)也好求\\\\ &那么\\sum_i=1^ng(i)就好求。\\\\ &令H(n) = \\sum_i=1^nh(i) = \\sum_i=1^n(f*g)(i)\\\\ &令S(n) = \\sum_i=1^ng(i)\\\\ &(1)根据迪利克雷卷积定义:\\\\ &有H(n)=\\sum_i=1^n(f*g)(i)= \\sum_i=1^n\\sum_d|if(d)g(\\frac i d)\\\\ &=\\sum_i=1^n\\sum_d=1^nf(d)g(\\frac i d)[d|i],再令i = i_1d,\\\\ &=\\sum_d=1^n\\sum_i_1d=1^nf(d)g(\\frac i_1d d)[d|i_1d]\\\\ &=\\sum_d=1^n\\sum_i_1d=1^nf(d)g(i_1)\\\\ &=\\sum_d=1^n\\sum_i=1^\\frac n df(d)g(i)\\\\ &=\\sum_d=1^nf(d)\\sum_i=1^\\frac n dg(i)\\\\ &=\\sum_d=1^nf(d)S(\\frac n d)\\\\ &取出第1项,(为什么取第1项?)\\\\ &则有H(n) = f(1)S(n)+\\sum_d=2^nf(d)S(\\frac n d)\\\\ &f(1)S(n) = H(n)-\\sum_d=2^nf(d)S(\\frac n d)\\\\ &S(n) = \\frac H(n)-\\sum_d=2^nf(d)S(\\frac n d)f(1)\\\\ &这里S(n)就得到了,后面的式子可以整除分块求。 \\endaligned h=fg,gi=1nh(i)i=1nf(i)i=1ng(i)H(n)=i=1nh(i)=i=1n(fg)(i)S(n)=i=1ng(i)(1)H(n)=i=1n(fg)(i)=i=1ndif(d)g(di)=i=1[日常摸鱼]杜教筛

●杜教筛入门(BZOJ 3944 Sum)

浅谈杜教筛

模板杜教筛(Sum)

[积性函数杜教筛莫比乌斯函数入门]学习总结

杜教筛