from a famous oier \(\texttt{tyqtyq}\)请点链接tyqtyq~! - 博客园 (cnblogs.com)

数论分块

\(\sum_{i=1}^{n} \lfloor\frac{n}{i}\rfloor \times f(i)\)

在\(O(n)\)筛出\(f(i)\)的前缀和后, 可以在单次\(O(\sqrt n)\)的复杂度下求出上式.

考虑\(\lfloor\frac{n}{i}\rfloor\)的取值个数. 在 \(i \leq \sqrt n\)时最多只有\(\sqrt n\)个\(i\), 故最多只有\(\sqrt n\)个取值.

在\(i>\sqrt n\)时, \(\lfloor\frac{n}{i}\rfloor \leq \frac{n}{i}<\sqrt n\), 故最多只有\(\sqrt n-1\)个取值.

因此我们可以考虑枚举\(\lfloor\frac{n}{i}\rfloor\)的取值. 因为函数不下降我们考虑枚举每个取值区间的左右端点. 不妨设某个取值区间的左端点是\(l\), 考虑求出该取值区间的右端点\(r\). 不妨设\(\lfloor\frac{n}{l}\rfloor = k\), 我断言\(r = \lfloor\frac{n}{k}\rfloor\). 因为\(kr \leq n \leq (k+1)r\), 所以必然在取值区间内. 又\(k(r+1) \geq n\)所以\(r+1\)不在取值区间内. 故右端点为\(r\).

莫比乌斯反演

两个性质

\(\sum\limits_{d|n} \mu(d) = [n=1]\) (经常用来展开\([f(n)=1]\))

\(\sum\limits_{d|n} \varphi(d) = n\)

对于 \(\gcd\) 的反演(出现\(\gcd\)的时候枚举\(\gcd\)也是一种时常奏效的方法):

\[\begin{align}f(n) &= \sum\limits_{i \leq a} \sum\limits_{j \leq b} [\gcd(i, j)=n]\\g(n) &= \sum\limits_{n|d} f(d)\\&= \sum\limits_{i \leq a} \sum\limits_{j \leq b} [n|\gcd(i, j)] \\&= \lfloor\frac{a}{n}\rfloor \lfloor\frac{b}{n}\rfloor\\\sum\limits_{n|d} \mu(\frac{d}{n}) g(d) &= \sum\limits_{n|d} \mu(\frac{d}{n})\sum\limits_{d|x} f(x)\\&= \sum\limits_{n|x} f(x) \sum\limits_{\frac{d}{n}|\frac{x}{n}} \mu(\frac{d}{n})\\&= \sum\limits_{n|x} f(x) [x=n] = f(n)\end{align}
\]

对于\(\sigma_0\)的反演

\[\begin{align}\sigma_0(xy) &= \sum\limits_{a|x}\sum\limits_{b|y} [\gcd(a, b)=1]\\&=\sum\limits_{a|x}\sum\limits_{b|y}\sum\limits_{d|\gcd(a, b)}\mu(d)\end{align}
\]

对于\(\varphi\)的反演

\[\begin{align}\varphi(ij)&=\frac{\varphi(i)\varphi(j)\gcd(i, j)}{\varphi(\gcd(i,j))}\\&=\sum\limits_{d}\varphi(i)\varphi(j)\frac{d}{\varphi(d)} [d = \gcd(i, j)]\\\end{align}
\]

反演本质

\[\begin{align}g(n) &= \sum\limits_{d|n} f(d)\\ f(n) &= \sum\limits_{d|n} [\frac{n}{d}=1]f(d) \\ &= \sum\limits_{d|n} \sum\limits_{id|n} \mu(i)f(d) \\ &=\sum\limits_{i|n} \mu(i) \sum\limits_{d|\frac{n}{i}} f(d) \\ &=\sum\limits_{d|n} \mu(d) f(\frac{n}{d}) = \sum\limits_{d|n} \mu(\frac{n}{d}) f(d) \end{align}
\]

狄利克雷卷积 与 杜教筛

下文中的\(A\),\(B\),\(C\)均指某积性函数.

狄利克雷卷积

定义:

\(A*B(n) = \sum\limits_{d|n} A(d)B(\frac{n}{d})\)

几个常用的卷积

\(\varphi *I = id\)

\(\mu * I = \epsilon\)

\(\epsilon * A = A\)

\(A*(B*C) = (A*B)*C\)

\(A*B = B*A\)

\((A+B)*C = A*C+B*C\)

杜教筛的原理

设\(A = B*C\), 于是有

\[\begin{align}\sum\limits_{i=1}^{n} A(i) &= \sum\limits_{i=1}^{n} \sum\limits_{d|i} C(d) B(\frac{i}{d})\\&=\sum\limits_{d=1}^{n}C(d)\sum\limits_{k=1}^{\lfloor\frac{n}{d}\rfloor}B(k)\end{align}
\]

不妨设\(S(n) = \sum\limits_{i=1}^{n} B(i)\)所以\(C(1)S(n) = \sum\limits_{i=1}^{n}A(i) - \sum\limits_{d=2}^{n}C(d)S(\lfloor\frac{n}{d}\rfloor)\)

若选择一个较好的\(C\)和\(A\), 则可以通过数论分块在\(T(n) = O(\frac{n}{\sqrt m}+m)\)的时间复杂度内完成此问题, 其中\(m\)是一个常数, 代表我们需要先使用线性筛筛出\(S(1\sim m)\), 可以发现在\(m = n^{\frac23}\)时算法复杂度为\(O(n^\frac23)\)为最优.

【转载】数论学习笔记(Blog of tyqtyq)的更多相关文章

  1. 五一DAY1数论学习笔记

    by ruanxingzhi 整除性 如果a能把b除尽,也就是没有余数,则我们称a整除b,亦称b被a整除.(不是除以,是整除!!) 记作:\(a|b\) |这个竖杠就是整除符号 整除的性质 自反性 对 ...

  2. [转载]Log4net学习笔记

    Log4net 学习笔记: 主要是根据apache站点整理的: 原文链接:http://logging.apache.org/log4net/release/sdk/ http://logging.a ...

  3. [转载]pytest学习笔记

    pytest学习笔记(三)   接着上一篇的内容,这里主要讲下参数化,pytest很好的支持了测试函数中变量的参数化 一.pytest的参数化 1.通过命令行来实现参数化 文档中给了一个简单的例子, ...

  4. 数论学习笔记之解线性方程 a*x + b*y = gcd(a,b)

    ~>>_<<~ 咳咳!!!今天写此笔记,以防他日老年痴呆后不会解方程了!!! Begin ! ~1~, 首先呢,就看到了一个 gcd(a,b),这是什么鬼玩意呢?什么鬼玩意并不 ...

  5. 转载-python学习笔记之输入输出功能读取和写入数据

    读取.写入和 Python 在 “探索 Python” 系列以前的文章中,学习了基本的 Python 数据类型和一些容器数据类型,例如tuple.string 和 list.其他文章讨论了 Pytho ...

  6. 转载-Python学习笔记之文件读写

    Python 文件读写 Python内置了读写文件的函数,用法和C是兼容的.本节介绍内容大致有:文件的打开/关闭.文件对象.文件的读写等. 本章节仅示例介绍 TXT 类型文档的读写,也就是最基础的文件 ...

  7. 转载——JavaScript学习笔记:取数组中最大值和最小值

    转载自:http://www.w3cplus.com/javascript/calculate-the-max-min-value-from-an-array.html. 取数组中最大值 可以先把思路 ...

  8. (转载)Android学习笔记⑨——android.content.ActivityNotFoundException异常处理

    异常1:Java.lang.ClassNotFoundException 08-13 18:29:22.924: E/AndroidRuntime(1875):Caused by: Java.lang ...

  9. 转载-python学习笔记之文件I/O

    Python 文件I/O 本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档. 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函数把你 ...

  10. 转载-python学习笔记之常用模块用法分析

    内置模块(不用import就可以直接使用)   常用内置函数   help(obj) 在线帮助, obj可是任何类型 callable(obj) 查看一个obj是不是可以像函数一样调用 repr(ob ...

随机推荐

  1. VM虚拟机的安装使用

    虚拟机的安装使用 1.安装win10镜像 1.点击创建新虚拟机 2.选择典型,然后下一步 3.稍后安装操作系统,然后下一步 4.选择windows操作系统,版本为win10 x64,然后下一步 5.虚 ...

  2. 在IIS Express下部署NuGet私服

    用途 个人开发,部署自己的NuGet pkg. 环境 Win11 IIS Express (轻度使用,不安装IIS,而使用VS预装的IIS Express) VS2022 步骤 开发环境准备 因我拟用 ...

  3. 【Docker】命令行操作

    Docker常用命令 帮助命令 docker version docker info docker --help Docker 客户端 docker 客户端非常简单 ,我们可以直接输入 docker ...

  4. Ink 和 TravisCI 更配哦

    前言 去年还是前年,无意间接触到ink,看到是用go写的,非常小巧和精简,于是乎fork了下,还整了个供ink用的docker镜像``. 不过那时候热衷于折腾博客...结果也没折腾出什么来, 今天整理 ...

  5. 【ESP32】两种模拟 USB 鼠标的方法

    上一篇水文中,老周给大伙伴们扯了关于 idf 中添加自定义 Arduino 组件的方案.这次咱们做一下 USB 鼠标玩玩. 很遗憾的是,老周无能,在 Arduino-esp32 组件依赖 TinyUS ...

  6. 用 .NET NativeAOT 构建完全 distroless 的静态链接应用

    前言 .NET NativeAOT 想必不少开发者都已经很熟悉了,它可以将 .NET 程序集直接编译到原生的机器代码,从而可以脱离 VM 直接运行.简单的一句 dotnet publish -c Re ...

  7. 9. RabbitMQ 消息队列幂等性,优先级队列,惰性队列的详细说明

    9. RabbitMQ 消息队列幂等性,优先级队列,惰性队列的详细说明 @ 目录 9. RabbitMQ 消息队列幂等性,优先级队列,惰性队列的详细说明 1. RabbitMQ 消息队列的 " ...

  8. IDEA构建Maven项目生成的文件说明(.mvn、mvnw、mvnw.cmd、.gitignore、.iml、.idea、pom.xml)

    IDEA构建的maven+springBoot项目结构如下: 1..gitignore:分布式版本控制系统git的配置文件,意思为忽略提交 在 .gitingore 文件中,遵循相应的语法,即在每一行 ...

  9. 一文搞懂Dockerfile

    Dockerfile官网 https://docs.docker.com/reference/dockerfile/ 什么是Dockerfile? Dockerfile 是一个文本文件,其内包含了一条 ...

  10. web自动化的元素定位

    一.基础元素定位 1.id定位:根据元素的id定位 By.id("id") webDriver.findElement(By.id("tab-account") ...