卷积 & 杜教筛

卷积

卷积定义:

  如果有数论函数\(f, g\), 那么它们卷积的第\(n\)项为\((f * g) (n)\),设这个卷出来的新函数为h,那么有
  \[h(n) = \sum_{k | n} f(k) g(n / k) = \sum_{ij = n}f(i) g(j)\]
  

一些性质:

  1,积性函数的卷积还是积性函数
  证明: 现有\(f, g\)为积性函数,且\(gcd(p, q) == 1\),求证\(h(p) \cdot h(q) = h(qp).\)
  \[h(p) \cdot h(q) = \sum_{ab = p}f(a) g(b) \cdot \sum_{cd = q}f(c) g(d)\]
  \[= \sum_{a} f(a) g(\frac{p}{a}) \sum_{c} f(c) g(\frac{q}{c})\]
  \[= \sum_{a} \sum_{c} f(a) f(c) g(\frac{p}{a}) g(\frac{q}{c})\]
  \[= \sum_{a} \sum_{c} f(ac) g(\frac{pq}{ac})\]
  因为\(ac \cdot \frac{pq}{ac} = pq\),所以
  \[\sum_{a} \sum_{c} f(ac)g(\frac{pq}{ac}) = \sum_{ac | pq} f(ac)g(\frac{pq}{ac})\]
  \[= \sum_{x|pq}f(x)g(\frac{pq}{x}) = h(pq)\]
  

常见狄利克雷卷积:

\(id = \phi * 1\)
\(d = 1 * 1\)
\(\sigma = id * 1\)
\(e = 1 * \mu\)
\(\phi = id * \mu\)
  

有趣的事情:

  1,FFT(多项式乘法)就是在求卷积。
    可以把\(f,g\)分别看做两个多项式,\(f(i)\)表示\(x^i\)的系数,\(g(i)\)同理。
    那么卷出来的\(h(i)\)就等于两式相乘后\(x^{i}\)的系数,因为卷积定义里面\(h(k)\)就要加上满足\(ij = k\)的\(f(i) g(j)\).

杜教筛

目的:在低于线性的时间内求积性函数前缀和

算法:

  设\(S(n) = \sum_{i = 1}^{n}f_{i}\).
  设有一个积性函数\(g(i)\).则:
  \[\sum_{i = 1}^{n}(g * f)(i) = \sum_{i = 1}^{n} \sum_{d | i} g(d)f(\frac{i}{d})\]
  因为当\(d | i\)时会统计到\(g(d)f(\frac{i}{d})\),因此直接枚举\(d\)和\(i = \frac{i}{d}\),\(i\)的最大值为\(\frac{n}{d}\),因为要满足\(i \cdot d \le n\).所以:
  \[原式= \sum_{d = 1}^{n}g(d) \sum_{i = 1}^{\frac{n}{d}}f(i) = \sum_{d = 1}^{n}g(d)S(\frac{n}{d})\]
  所以:
  \[\sum_{i = 1}^{n}(g * f)(i) = \sum_{d = 1}^{n}g(d)S(\frac{n}{d})\]
  
  因为我们有:
  \[g(1)S(n) = \sum_{i = 1}^{n}g(i)S(\frac{n}{i}) - \sum_{i = 2}^{n}g(i)S(\frac{n}{i})\]
  带入上式得:
  \[g(1)S(n) = \sum_{i = 1}^{n}(g * f)(i) - \sum_{i = 2}^{n}g(i)S(\frac{n}{i})\]
  因此我们只需要找到一个合适的\(g\),带入上式,使得\(\sum_{i = 1}^{n}(g * f)(i)\)可以快速计算,那么就只需要对\(\sum_{i = 2}^{n}g(i)S(\frac{n}{i})\)进行求解就可以得到\(S(n)\),而这个式子中的\(S(\frac{n}{i})\)是可以整数分块求的。
  于是就可以做到\(O(n^{\frac{3}{4}})\)求解了。
  同时为了降低复杂度,可以先预处理一部分\(S\)值。通过证明可得:设我们当前预处理了前\(k\)个S,那么当\(k\)取到\(n^{\frac{2}{3}}\)时可以使得整体复杂度降为\(n^{\frac{2}{3}}\).(后面部分记忆化求解)
  
  关于记忆化:
  1,可以使用map/hash解决。
  2,或者观察到对于同一个\(S(n)\),我们所有要求的\(S\)值都是形如\(S(\frac{n}{x})\)的,并且我们知道\(\lfloor{ \frac{\lfloor{\frac{n}{x}}\rfloor}{y} }\rfloor = \lfloor {\frac{n}{xy}} \rfloor\),因此对于同一个\(n\),我们求的所有\(S(k)\)都可以表示为\(S(\frac{n}{x})\),因此设\(now = \frac{n}{x}\)。那么:
    1,对于\(now <= n^{\frac{2}{3}}\),我们已经预处理出来了。
    2,对于\(now > n^{\frac{2}{3}}\),因为\(now > n^{\frac{2}{3}}\),所以\(x = \frac{n}{now} <= n ^ {\frac{1}{3}}\),因此我们可以令\(sum[x] = S(\frac{n}{x})\)。即若我们有\(S(now)\) 其中$now > n ^ {\frac{2}{3}} $,那么我们可以把这个值存入 \(sum[\frac{n}{now}]\).
    注意:但这样的话,虽然减少一个log,但若有多个不同n值,则每次处理一个新的n值时就需要清空S数组。
    因为虽然对于同一个n值,我们要求的所有S的下标都可以表示为 \(\frac{n}{x}\),但不是任意一个数都可以被表示为 \(\frac{n}{x}\) 的,
    如果这个时候的另一个\(n\)恰好不能被表示,那么答案就会出错

原文地址:https://www.cnblogs.com/ww3113306/p/10300633.html

时间: 2024-10-09 23:34:23

卷积 & 杜教筛的相关文章

51nod 1220 约数之和(杜教筛 + 推推推推推公式)

题意 给出\(n(1\leq n \leq 10^9)\),求\(\sum_{i=1}^n\sum_{j=1}^n\sigma(ij)\),其中\(\sigma(n)\)表示\(n\)的约数之和. balabala 交了两道杜教筛的的板子题(51nod 1239, 1244)就看到了这题,然后不会搞,然后看题解看了一天一夜终于彻底搞明白一发A掉了...感觉学到了很多,写个博客整理一下,如有错请指出. 技能需求 数论函数与线性筛 莫比乌斯反演(也可以当成容斥去理解) 狄利克雷卷积 杜教筛 强大的数

杜教筛 与 数论函数(狄雷克卷积)

为了改变数论只会GCD的尴尬局面,我们来开一波数论: 数论函数: 数论函数是定义域在正整数的函数. 积性函数: f(ab)=f(a)f(b),gcd(a,b)=1 ,完全积性函数: f(ab)=f(a)f(b) . 常见积性函数: φ(n) ,μ(n) (莫比乌斯函数), d(n) (因子个数), σ(n) (因子和). 单位函数 : e(n)=[n=1] . 常见完全积性函数: Idk(n)=n^k , 1(n)=Id0(n) , Id(n)=Id1(n) . 我们 有以下令人窒息的操作: (

数论入门——莫比乌斯函数,欧拉函数,狄利克雷卷积,线性筛,莫比乌斯反演,杜教筛

一个菜鸡对数论的一点点理解... 莫比乌斯函数 定义函数\(\mu(n)\)为: 当n有平方因子时,\(\mu(n)=0\). 当n没有平方因子时,\(\mu(n)=(-1)^{\omega(n)}\),\(\omega(n)\)表示n不同质因子的个数. 性质1: \(\sum_{d|n}\mu(d)=[n=1]\) 证明:我们把n分解质因数,则原式\(=(-1+1)^{\omega(n)}=0\). 因为对于不同的质因子,只有选和不选两种方案,这是一个组合数相加的形式,偶数加奇数减,根据二项式

【数论】狄利克雷卷积及其快速计算方法及杜教筛

目录(假的 狄利克雷卷积基础知识 数论函数 狄利克雷卷积定义 狄利克雷卷积性质 常用卷积 卷积计算方法 最暴力的暴力 稍好的暴力 优美的暴力 莫比乌斯反演(待填坑) 杜教筛 经典杜教筛 第二种杜教筛 第三种杜教筛 背景 本人即将去CTS&APIO2019,由于一些特殊原因,发现自己数论突然变得很菜. 就决定在去的前一天,翻出来以前的数论学习资料看一看.翻到了czgj的校内狄利克雷卷积课件,发现其中提到了的任意数列\(f(n)\)和\(g(n)\)的狄利克雷卷积\((f*g)(n)\)(从1到n,

杜教筛 学习总结

看了看唐老师的blog,照猫画虎的做了几道题目,感觉对杜教筛有些感觉了 但是稍微有一点难度的题目还是做不出来,放假的时候争取都A掉(挖坑ing) 这篇文章以后等我A掉那些题目之后再UPD上去就好啦 由于懒得去写怎么用编辑器写公式,所以公式就准备直接copy唐老师的啦 首先积性函数和完全积性函数什么的就不再多说了 列举常见的积性函数: 1.约数个数函数和约数个数和函数 2.欧拉函数phi 3.莫比乌斯函数mu 4.元函数e 其中e(n)=[n==1] 5.恒等函数I 其中I(n)=1 6.单位函数

杜教筛进阶+洲阁筛讲解+SPOJ divcnt3

Part 1:杜教筛进阶在了解了杜教筛基本应用,如$\sum_{i=1}^n\varphi(i)$的求法后,我们看一些杜教筛较难的应用.求$\sum_{i=1}^n\varphi(i)*i$考虑把它与$id$函数狄利克雷卷积后的前缀和.$$\sum_{i=1}^n\sum_{d|i}\varphi(d)*d*\frac id=\sum_{i=1}^ni^2$$枚举$T=\frac id$,原式化为$$\sum_{T=1}^nT\sum_{d=1}^{\lfloor\frac nT\rfloor}

[日常摸鱼]杜教筛

因为博主比较菜所以可能一些地方写的有问题或者不清楚,以及我的废话有点多- 在这里先感谢下小伙伴ww @MoebiusMeow 的帮助~ 参考资料: [1]浅谈一类积性函数的前缀和(skywalkert) [2]杜教筛--省选前的学习1(_rqy) (下面约定$[p]$表示满足条件$p$时为1不满足为0,以及下面说的函数都是数论函数) 前置技能(一些定义) 数论函数:若$f:Z^{+} \rightarrow C$,则称$f$为数论函数 积性函数:若一个数论函数$f(n)$对于所有$m_1 \bo

【Luogu3768】简单的数学题(莫比乌斯反演,杜教筛)

[Luogu3768]简单的数学题(莫比乌斯反演,杜教筛) 题面 洛谷 \[求\sum_{i=1}^n\sum_{j=1}^nijgcd(i,j)\] $ n<=10^9$ 题解 很明显的把\(gcd\)提出来 \[\sum_{d=1}^nd\sum_{i=1}^n\sum_{j=1}^nij[gcd(i,j)==d]\] 习惯性的提出来 \[\sum_{d=1}^nd^3\sum_{i=1}^{n/d}\sum_{j=1}^{n/d}ij[gcd(i,j)==1]\] 后面这玩意很明显的来一发

[bzoj4916] 神犇和蒟蒻 [杜教筛]

题面: 传送门 一句话,就是让你求$\mu\left(i^2\right)$以及$\varphi\left(i^2\right)$的前缀和 思路: 第一问,瞪了一会儿恍然大悟:这不就是1吗...... 因为对于$\mu\left(i^2\right)$,$i^2=i\ast i$,那么$\mu\left(i^2\right)$在$i\neq1$的时候值都是0 所以第一问输出1就好了...... 接下来看第二问 这一问中解决$\varphi\left(i^2\right)$是关键,因为这东西是个积