杜教筛入门详解

杜教筛入门

前置知识

迪利克雷卷积(*):

先介绍三个重要的函数:

  • 元函数ϵ(n)=[n==1]\epsilon(n) = [n == 1]ϵ(n)=[n==1]

    原函数可以看成是迪利克雷卷积里的单位元,即(ϵ∗f)(n)=f(n)(\epsilon * f)(n) = f(n)(ϵf)(n)=f(n)

    证明:(ϵ∗f)(n)=∑d∣nϵ(d)f(nd)=ϵ(1)f(n)=f(n)(\epsilon * f)(n) = \sum_{d \mid n} \epsilon(d) f(\frac{n}{d}) = \epsilon(1)f(n) = f(n)(ϵf)(n)=dnϵ(d)f(dn)=ϵ(1)f(n)=f(n)

  • 恒等函数I(n)=1I(n) = 1I(n)=1,通俗来讲就是其值恒为1

  • 单位函数id(n)=nid(n) = nid(n)=n

卷积的定义:(f∗g)(n)=∑d∣nf(d)g(nd)(f*g)(n) = \sum_{d \mid n} f(d)g(\frac{n}{d})(fg)(n)=dnf(d)g(dn)

并且这个式子是满足:交换律,结合律,分配律的。

与莫比乌斯函数有关的卷积:

∑d∣nμ(d)=[n==1]\sum_{d \mid n} \mu(d) = [n == 1]dnμ(d)=[n==1]

写成卷积也就是(I∗μ)(n)=ϵ(n)=[n==1](I * \mu)(n) = \epsilon(n) = [n == 1](Iμ)(n)=ϵ(n)=[n==1]

与欧拉函数有关的卷积:

∑d∣nϕ(d)=n\sum_{d \mid n} \phi(d) = ndnϕ(d)=n

写成卷积就是(I∗ϕ)(n)=id(n)(I * \phi)(n) = id(n)(Iϕ)(n)=id(n)

正式开始了

所谓杜教筛就是可以在n23n ^ \frac{2}{3}n32的时间复杂度内算出积性函数的浅醉和来,所以当数据≥1e8\geq 1e81e8的时候就只能用杜教筛了。

假设有积性函数f(n)f(n)f(n),我们要求S(n)=∑i=1nf(i),n≤1e10S(n) = \sum\limits_{i = 1} ^{n}f(i),n \leq 1e10S(n)=i=1nf(i)n1e10

根据迪利克雷卷积,我们引入一个新的积性函数g(n)g(n)g(n)F(n)=(g∗f)(n)F(n) = (g * f)(n)F(n)=(gf)(n)
∑i=1nF(i)=∑i=1n(g∗f)(i)=∑i=1n∑d∣ig(d)f(id)=∑d=1ng(d)∑d∣if(id)=∑d=1ng(d)∑i=1ndf(i)=∑d=1ng(d)S(nd)\sum_{i = 1} ^{n} F(i) = \sum_{i = 1} ^{n} (g * f)(i) = \sum_{i = 1} ^{n} \sum_{d \mid i} g(d)f(\frac{i}{d})\\ = \sum_{d = 1} ^{n} g(d) \sum_{d \mid i} f(\frac{i}{d}) = \sum_{d = 1} ^{n} g(d) \sum_{i = 1} ^{\frac{n}{d}}f(i)\\ = \sum_{d = 1} ^{n} g(d) S(\frac{n}{d})\\ i=1nF(i)=i=1n(gf)(i)=i=1ndig(d)f(di)=d=1ng(d)dif(di)=d=1ng(d)i=1dnf(i)=d=1ng(d)S(dn)
所以有∑i=1nF(i)=g(1)S(n)+∑d=2ng(d)S(nd)\sum\limits_{i = 1} ^{n} F(i) = g(1)S(n) + \sum_{d = 2} ^{n} g(d) S(\frac{n}{d})i=1nF(i)=g(1)S(n)+d=2ng(d)S(dn)

积性函数的定义有g(1)=1g(1) = 1g(1)=1,所以接下来

S(n)=∑i=1nF(i)−∑d=2ng(d)S(nd)S(n) = \sum\limits_{i = 1} ^{n} F(i) - \sum\limits_{d = 2} ^{n}g(d)S(\frac{n}{d})S(n)=i=1nF(i)d=2ng(d)S(dn)

如果我们能够较快速的计算出∑i=1n(g∗f)(i)\sum\limits_{i = 1} ^{n} (g * f)(i)i=1n(gf)(i)这个问题就可以通过数论分块很好的解决了,当然在次之前我们还得预先筛选出前n23n ^{\frac{2}{3}}n32的前缀和来,然后再通过记忆化搜索去得到答案。

几个例子

一、求S(n)=∑i=1nμ(i)S(n) = \sum\limits_{i = 1} ^{n} \mu(i)S(n)=i=1nμ(i)

我们先套用上面的式子S(n)=∑i=1ng∗μ−∑d=2ng(d)S(nd)S(n) = \sum\limits_{i = 1} ^{n} g * \mu - \sum\limits_{d = 2} ^{n}g(d)S(\frac{n}{d})S(n)=i=1ngμd=2ng(d)S(dn)

我们考虑到I∗μ=ϵI * \mu = \epsilonIμ=ϵ,于是我们得到S(n)=∑i=1nϵ−∑d=2nS(nd)=1−∑d=2nS(nd)S(n) = \sum\limits_{i = 1} ^{n}\epsilon - \sum\limits_{d = 2} ^{n} S(\frac{n}{d}) = 1 - \sum\limits_{d = 2} ^{n} S(\frac{n}{d})S(n)=i=1nϵd=2nS(dn)=1d=2nS(dn)

于是我们就完美解决了这个问题。

二、求S(n)=∑i=1niμ(i)S(n) = \sum\limits_{i = 1} ^{n} i \mu(i)S(n)=i=1niμ(i)

上面式子按照套路模板写下来S(n)=∑i=1ng∗μ∗id−∑d=2ng(d)S(nd)S(n) = \sum\limits_{i = 1} ^{n} g * \mu *id - \sum\limits_{d = 2} ^{n}g(d)S(\frac{n}{d})S(n)=i=1ngμidd=2ng(d)S(dn)

同样的有μ∗I=ϵ,ϵ∗id=id\mu * I = \epsilon,\epsilon *id = idμI=ϵϵid=id

所以我们得到S(n)=∑i=1ni−∑d=2nS(nd)S(n) = \sum\limits_{i = 1} ^{n}i - \sum\limits_{d = 2} ^{n}S(\frac{n}{d})S(n)=i=1nid=2nS(dn)

貌似推得很有道理,所以我们错在哪?

事实上我们模板都抄错了iμ(i)i \mu(i)iμ(i)这东西显然不是迪利克雷卷积,,,

我们设f(n)=nμ(n)f(n) = n \mu(n)f(n)=nμ(n),所以g∗f=∑d∣nf(d)g(nd)=∑d∣ndμ(d)g(nd)g * f = \sum_{d \mid n} f(d) g(\frac{n}{d}) = \sum_{d \mid n} d \mu(d) g(\frac{n}{d})gf=dnf(d)g(dn)=dndμ(d)g(dn)

容易想到∑d∣nμ(d)=[n==1]\sum_{d \mid n} \mu(d) = [n == 1]dnμ(d)=[n==1],所以从这点出发我们考虑dg(nd)μ(d)d g(\frac{n}{d}) \mu(d)dg(dn)μ(d)如何得到含有μ(d)\mu(d)μ(d)的形式。

显然,通过观察如果我们让g(n)=ng(n) = ng(n)=n,上式就有dg(nd)μ(d)=dndμ(d)=nμ(d)d g(\frac{n}{d}) \mu(d) = d \frac{n}{d} \mu(d) = n\mu(d)dg(dn)μ(d)=ddnμ(d)=nμ(d)

带入原式子就变成了S(n)=∑i=1n∑d∣iiμ(d)−∑d=2ndS(nd)=∑i=1ni∑d∣iμ(d)−∑d=2ndS(nd)=∑i=1ni(i==1)−∑d=2ndS(nd)S(n) = \sum\limits_{i = 1} ^{n} \sum\limits_{d \mid i}i \mu(d) - \sum\limits_{d = 2} ^{n}d S(\frac{n}{d}) = \sum\limits_{i = 1} ^{n} i\sum\limits_{d \mid i}\mu(d) - \sum\limits_{d = 2} ^{n}d S(\frac{n}{d}) = \sum\limits_{i = 1} ^{n} i(i == 1) - \sum\limits_{d = 2} ^{n}d S(\frac{n}{d})S(n)=i=1ndiiμ(d)d=2ndS(dn)=i=1nidiμ(d)d=2ndS(dn)=i=1ni(i==1)d=2ndS(dn)

由此我们成功推出S(n)=1−∑d=2ndS(nd)S(n) = 1 - \sum\limits_{d = 2} ^{n} d S(\frac{n}{d})S(n)=1d=2ndS(dn)

三、求S(n)=∑i=1nϕ(i)S(n) = \sum\limits_{i = 1} ^{n} \phi(i)S(n)=i=1nϕ(i)

直接套就行了这个S(n)=∑i=1ng∗phi−∑d=2ng(d)S(nd)S(n) = \sum\limits_{i = 1} ^{n} g * phi - \sum\limits_{d = 2} ^{n}g(d)S(\frac{n}{d})S(n)=i=1ngphid=2ng(d)S(dn)

I∗ϕ=idI * \phi = idIϕ=id,所以S(n)=∑i=1ni−∑d=2nS(nd)S(n) = \sum\limits_{i = 1} ^{n} i - \sum\limits_{d = 2} ^{n}S(\frac{n}{d})S(n)=i=1nid=2nS(dn)

就直接推出来了。

四、求S(n)=∑i=1niϕ(i)S(n) = \sum\limits_{i = 1} ^{n} i \phi(i)S(n)=i=1niϕ(i)

仿照二先推出一个ggg出来,

f∗g=∑d∣nf(d)g(nd)=∑d∣ndϕ(d)g(nd)f * g = \sum_{d \mid n} f(d) g(\frac{n}{d}) = \sum_{d \mid n} d \phi(d) g(\frac{n}{d})fg=dnf(d)g(dn)=dndϕ(d)g(dn)

同样联想∑d∣nϕ(d)=n\sum_{d \mid n} \phi(d) = ndnϕ(d)=n,所以我们同样地取g(n)=n=idg(n) = n = idg(n)=n=id

就有f∗g=∑d∣nnϕ(d)f * g = \sum_{d \mid n} n \phi(d)fg=dnnϕ(d)

带入杜教筛式子就有S(n)=∑i=1ni∑d∣iϕ(d)−∑d=2ndS(nd)=S(n)=∑i=1ni2−∑d=2ndS(nd)S(n) = \sum\limits_{i = 1} ^{n} i \sum\limits_{d \mid i} \phi(d) - \sum\limits_{d = 2} ^{n}dS(\frac{n}{d}) = S(n) = \sum\limits_{i = 1} ^{n} i ^ 2 - \sum\limits_{d = 2} ^{n}dS(\frac{n}{d})S(n)=i=1nidiϕ(d)d=2ndS(dn)=S(n)=i=1ni2d=2ndS(dn)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P2765 魔术球问题(网络流)

P2765 魔术球问题 给出n根柱子&#xff0c;求解可以将最多多少编号的球放在上面&#xff0c;并且满足相邻的编号和为完全平方数。 n<50 这个数据范围我们可以选择网络流&#xff0c;然后将对应点连边&#xff0c;然后每次枚举编号&#xff0c;将其加入残量网络&#xff0c…

DotNetCore 3.0 助力 WPF本地化

概览随着我们的应用程序越来越受欢迎&#xff0c;我们的下一步将要开发多语言功能。方便越来越多的国家使用我们中国的应用程序&#xff0c;基于 WPF 本地化&#xff0c;我们很多时候使用的是系统资源文件&#xff0c;可是动态切换本地化&#xff0c;就比较麻烦了。实现思路现在…

#6229. 这是一道简单的数学题(反演 + 杜教筛)

#6229. 这是一道简单的数学题 推式子 ∑i1n∑j1ilcm(i,j)gcd(i,j)(∑i1n∑j1nlcm(i,j)gcd(i,j)n)∗inv2所以重点求∑i1n∑j1nlcm(i,j)gcd(i,j)∑i1n∑j1nijgcd(i,j)2∑d1n∑i1nd∑j1ndij(gcd(i,j)1)∑d1n∑k1ndμ(k)k2(∑i1nkdi)2我们另tkd&#xff0c;得到∑t1n(∑i1nti)2∑k…

P2766 最长不下降子序列问题(网络流)

P2766 最长不下降子序列问题 求解LIS长度k求解长度为k的不下降子序列个数&#xff0c;并且一个数只能使用一次求解长度为k的不下降子序列个数&#xff0c;第一个数和第n个数可以使用任意次 首先利用dp可以求解出以每个点开始的最长不下降子序列&#xff0c;然后可以类似于最短…

开源题材征集 + MVCEF Core 完整教程小结

到目前为止&#xff0c;我们的MVCEF Core 完整教程的理论部分就全部结束了&#xff0c;共20篇&#xff0c;覆盖了核心的主要知识点。下一阶段是实战部分&#xff0c;我们将会把这些知识点串联起来&#xff0c;用10篇(天)来完成一个开源项目。现向园友征集题材&#xff0c;你提需…

P2770 航空路线问题(网络流)

P2770 航空路线问题 似乎是一个经典的双调路径问题&#xff0c;然后这里使用网络流解决了&#xff0c;本质上要求两条路径没有经过同一个点&#xff0c;并且总长度最大&#xff0c;所以我们实际上可以跑网络流&#xff0c;然后拆点限制路径没有交点。

欧拉心算(反演 + 积性函数筛)

欧拉心算 推式子 ∑i1n∑j1nϕ(gcd(i,j))∑d1nϕ(d)∑i1nd∑j1nd[gcd(i,j)1]∑d1nϕ(d)∑k1ndμ(k)(⌊nkd⌋)2另tkd∑t1n(⌊nt⌋)2∑d∣tϕ(d)μ(td)另f(n)∑d∣nϕ(d)μ(nd)我们考虑如何得到这个函数的前缀和&#xff0c;显然这是一个积性函数有如下性质f(1)1f(p)ϕ(1)μ(p)ϕ…

对微软的敌视何时休? 从一篇语言评论文章对C#的评价说起

看到一篇公众号文章《2020年什么编程语言最受欢迎&#xff0c;待遇最高&#xff1f;》&#xff0c;其中对C#的描述如下&#xff1a;点击阅读原文&#xff0c;看到这是一篇翻译文章&#xff1a;https://codinginfinite.com/top-programming-languages-2020-stats-surveys/这篇文…

1 ~ n的k次方求和模板

∑i1nik\sum\limits_{i 1} ^{n} i ^ ki1∑n​ik /*Author : lifehappy */ #pragma GCC optimize(2) #pragma GCC optimize(3) #include <bits/stdc.h>using namespace std;typedef long long ll;const int inf 0x3f3f3f3f; const double eps 1e-7;const int N 1e6 …

ASP.NET Core on K8S深入学习(6)Health Check

本篇已加入《.NET Core on K8S学习实践系列文章索引》&#xff0c;可以点击查看更多容器化技术相关系列文章。预计阅读时间为10分钟。01—关于K8S中的健康监测所谓Health Check&#xff0c;就是健康检查&#xff0c;即防微杜渐。K8S是一个编排引擎可以帮助我们快捷地部署容器集…

Polynomial(2019南昌邀请赛)(拉格朗日插值)

Polynomial 思路 题目给的是一个nnn次多项式&#xff0c;要我们求∑ilr\sum\limits_{i l} ^{r}il∑r​&#xff0c;也就是一个累加的形式&#xff0c;容易想到转换成求前缀和。 所以我们考虑求前缀和&#xff0c;容易得到这个多项式的前缀和一定是≥n&≤n1\geq n \&…

P3356 火星探险问题(网络流)

P3356 火星探险问题 对于一个第一次经过会有价值&#xff0c;但是之后经过没有价值的点&#xff0c;我们的处理方法就是只连一条流量为1并且有费用的边&#xff0c;再连接流量为INF但是没有费用的边&#xff0c;这样我们要使得价值最大就会优先流有费用的边。

ASP.NET Core 使用 JWT 自定义角色/策略授权需要实现的接口

目录① 存储角色/用户所能访问的 API② 实现 IAuthorizationRequirement 接口③ 实现 TokenValidationParameters④ 生成 Token⑤ 实现服务注入和身份认证配置⑥ 实现登陆⑦ 添加 API 授权策略⑧ 实现自定义授权校验⑨ 一些有用的代码① 存储角色/用户所能访问的 API例如 使用 …

EOJ Monthly 2019.11 E. 数学题(反演 + 杜教筛 + 拉格朗日插值)

EOJ Monthly 2019.11 ∑i1n∑a11i∑a21i∑a31i⋯∑ak−1i∑aki[gcd(a1,a2,a3,…,ak−1,ak,i)1]∑i1n∑d∣iμ(d)⌊id⌋k∑d1nμ(d)∑d∣i⌊id⌋k∑d1nμ(d)∑t1ndtk\sum_{i 1} ^{n} \sum_{a_1 1} ^{i} \sum_{a_2 1} ^{i} \sum_{a_3 1} ^{i} \dots \sum_{a_{k - 1}} ^{i} \s…

打表

打表 众所周知&#xff0c;打表是一项非常非常重要的技能QAQ 寻找通项&#xff1a;直接观察一元函数或者一些dp值或者sg值的规律注意二进制&#xff1a;有些规律不在10进制下&#xff0c;而是存在于二进制下观察递推关系&#xff1a;有时候无法得到有用的通项&#xff0c;但是…

关于 .Net Core runtimeconfig 文件说明

项目的bin\debug\netcoreapp${Version}下面能够找到这个${AppName}.runtimeconfig.json文件&#xff0c;简单来说&#xff0c;它就是用来定义应用程序所用的共享框架&#xff08;.Net Core App&#xff09;以及运行时选项 的一个文件。一个简单的例子{ "runtimeOptions&q…

F. Cowmpany Cowmpensation(树形dp + 拉格朗日插值)

F. Cowmpany Cowmpensation 首先一般dp推导dp[i][j]∏u∈soni∑k1jdp[v][k]dp[i][j] \prod\limits_{u \in son_i} \sum\limits_{k 1} ^{j} dp[v][k]dp[i][j]u∈soni​∏​k1∑j​dp[v][k] 这个是毫无疑问的&#xff0c;然后我们考虑如何得到d≥nd \geq nd≥n的情况。 我们…

P4055 [JSOI2009]游戏(二分图匹配+博弈)

P4055 [JSOI2009]游戏 对于一个网格&#xff0c;上面有一些障碍物不能走&#xff0c;A选择起点&#xff0c;然后B走到相邻的四个格子之一&#xff0c;然后轮流移动不能移动的一方失败。求解所有可以赢的初始位置。 首先对于这个问题要想到网格图上博弈&#xff0c;两个人走的…

net core 3.0 之Grpc新特性小试牛刀

作者&#xff1a; 相信微服务大家伙都有听说和知道&#xff0c;好处弊端咱也不多说了&#xff0c;Grpc算是一个比较全面的微服务框架&#xff0c;也得到微软的支持总结下来就是&#xff0c;跨平台&#xff0c;可靠&#xff0c;通信快&#xff0c;扩展性强&#xff0c;网络消耗小…

Fraction Construction Problem(拓展欧几里德)

Fraction Construction Problem 思路 cd−efab\frac{c}{d} - \frac{e}{f} \frac{a}{b}dc​−fe​ba​ a<b&f<ba < b \& f < ba<b&f<b 1≤1,e≤410121 \leq 1, e \leq 4 \times10 ^{12}1≤1,e≤41012 当b 1时&#xff0c;一定无解。 gcd(a, b…