目录

前言:发现最近都没怎么写博客,,,赶紧发篇以前记的笔记凑凑数

卷积

卷积定义:

  如果有数论函数\(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(x)\)都可以表示为\(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\)恰好不能被表示,那么答案就会出错

卷积 & 杜教筛的更多相关文章

  1. 中国剩余定理 & 欧拉函数 & 莫比乌斯反演 & 狄利克雷卷积 & 杜教筛

    ssplaysecond的博客(请使用VPN访问): 中国剩余定理: https://ssplaysecond.blogspot.jp/2017/04/blog-post_6.html 欧拉函数: h ...

  2. 洛谷P3768 简单的数学题(莫比乌斯反演+狄利克雷卷积+杜教筛)

    传送门 不会…… 两篇加在一起都看不懂…… https://www.cnblogs.com/cellular-automaton/p/8241128.html https://www.luogu.or ...

  3. [基本操作] Mobius 反演, Dirichlet 卷积和杜教筛

    Dirichlet 卷积是两个定义域在正整数上的函数的如下运算,符号为 $*$ $(f * g)(n) = \sum_{d|n}f(d)g(\frac{n}{d})$ 如果不强调 $n$ 可简写为 $ ...

  4. 【Bzoj3944】杜教筛模板(狄利克雷卷积搞杜教筛)

    题目链接 哇杜教筛超炫的 有没有见过$O(n^\frac{2}{3})$求欧拉函数前缀和的算法?没有吧?蛤蛤蛤 首先我们来看狄利克雷卷积是什么 首先我们把定义域是整数,陪域是复数的函数叫做数论函数. ...

  5. 我也不知道什么是"莫比乌斯反演"和"杜教筛"

    我也不知道什么是"莫比乌斯反演"和"杜教筛" Part0 最近一直在搞这些东西 做了将近超过20道题目吧 也算是有感而发 写点东西记录一下自己的感受 如果您真的 ...

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

    [Luogu3768]简单的数学题(莫比乌斯反演,杜教筛) 题面 洛谷 \[求\sum_{i=1}^n\sum_{j=1}^nijgcd(i,j)\] $ n<=10^9$ 题解 很明显的把\( ...

  7. 【BZOJ3944】Sum(杜教筛)

    [BZOJ3944]Sum(杜教筛) 题面 求\[\sum_{i=1}^n\mu(i)和\sum_{i=1}^n\phi(i)\] 范围:\(n<2^{31}\) 令\[S(n)=\sum_{i ...

  8. 杜教筛:Bzoj3944: sum

    题意 求\(\sum_{i=1}^{n}\varphi(i)和\sum_{i=1}^{n}\mu(i)\) \(n <= 2^{31}-1\) 不会做啊... 只会线性筛,显然不能线性筛 这个时 ...

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

    Part 1:杜教筛进阶在了解了杜教筛基本应用,如$\sum_{i=1}^n\varphi(i)$的求法后,我们看一些杜教筛较难的应用.求$\sum_{i=1}^n\varphi(i)*i$考虑把它与 ...

随机推荐

  1. 16、Java并发编程:Timer和TimerTask

    Java并发编程:Timer和TimerTask(转载) 下面内容转载自: http://blog.csdn.net/xieyuooo/article/details/8607220 其实就Timer ...

  2. [转]WIN2008 IIS7的日期格式

    最近项目升级服务器从32位升级到64位的WIN2008,日期显示格式非我们所期望的yyyy-M-d格式,原以为修改控制面板的日期格式即可,可是不行. 修改注册表问题解决. 修改方法: 运行注册表编辑器 ...

  3. xampp服务器搭建和使用

    1.安装完XAMPP后会出现Apache端口被占用的问题,一下方法解决 错误信息如下: Error: Apache shutdown unexpectedly. 9:37:01  [Apache] T ...

  4. vue2.0做移动端开发用到的相关插件和经验总结1.0

    最近在用vue2.0做微信公众号相关的前端开发,经过这次开发实践,现将项目中用到的相关比较实用的插件及遇到的相关问题进行整理,希望和大家共同交流...... cssrem:一个CSS值转REM的VSC ...

  5. P,V操作及同步互斥实例

    无论是计算机考研.计算机软件水平考试.计算机操作系统期末考试还是其他计算机岗位考试,P.V原语操作都是一个常考点.下面笔者总结了关于P.V操作的一些知识. 信号量是最早出现的用来解决进程同步与互斥问题 ...

  6. SICP读书笔记 1.2

    SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...

  7. Python的sys.argv使用说明

    刚开始使用这个参数的时候,很不明白其含义.网上搜索很多都是贴的官网上面的一则实例,说看懂,就明白.可是,我看不懂.现在在回头看这个参数使用,并不是很麻烦. 举几个小例子就明白了. 创建一个脚本,内容如 ...

  8. 基于C#的机器学习--机器学习的基本知识

    机器学习的基本知识 ,…用n个观测值测量.但我们不再对Y的预测感兴趣,因为我们不再有Y了,我们唯一感兴趣的是在已有的特征上发现数据模式: ​ 在前面的图中,我们可以看到这样的数据本身更适合于非线性方法 ...

  9. PowerDesigne 建立概念数据模型

    本文主要介绍PowerDesigner概念数据模型以及实体.属性创建. 一.新建概念数据模型1)选择File-->New,弹出如图所示对话框,选择CDM模型(即概念数据模型)建立模型. 2)完成 ...

  10. [redis] linux下主从篇(2)

    一.前言1.为何要主从架构避免单机故障,主服务器挂掉后,还可以手动切换从服务为主服务继续工作,保持缓存数据完整. 2.主从同步的原理步骤从服务器连接主服务器,发送SYNC命令:主服务器接收到SYNC命 ...