zoukankan      html  css  js  c++  java
  • 浅析勒贝格积分的思想在数论函数求和中的应用

    (标题党)利益声明:本文标题纯粹胡扯请读者忽略。

    I. PreFace

    我们来看这样一题(虽然跟本文看起来没什么关系):

    给定序列 (A),请在 (O(n)) 时间内求出如下式子:

    [sum_{l=1}^nsum_{r=l}^{n}min_{lle j le r} A_j ]

    这个式子中最困难的理应是区间最小值这一项,倘若枚举 (l,r),这个式子再怎么都是 (O(n^2)) 的。但是我们可以枚举这个最小值,对于每个位置看一看它在哪些区间中是最小值,然后就可以快速统计了。

    你会发现这东西就好像是一个黎曼不可积的函数,它可能勒贝格可积;我们枚举的这个最小值就是在给 (y) “分段”,而寻找它在哪些区间中作为最小值其实就是在寻找它的 勒贝格测度

    事实上,我们要求的这个式子其实就是一个三维上的分段函数,(i)(j) 是自变量,(min) 是函数值;尽管它黎曼不可积,但是它勒贝格可积。这就解释了为什么这么走行得通而直接枚举 (i,j) 行不通。(胡扯中)。

    I. 正文

    我们考虑把这个方法用到整除的偏序集上。来一个简单的例题:

    [f(n,m)=sum_{i=1}^nsum_{j=1}^m gcd(i,j) ]

    让我们把它写成这样的形式(左边的函数值,右手边用条件的形式表示测度):

    [f(n,m)=sum_{d=1}^{min(n,m)} d sum_{i=1}^nsum_{j=1}^m [gcd(i,j) = d] ]

    用一个常用方法:(gcd=k) 的时候把 (i)(j) 除以 (k),得到如下式子:

    [f(n,m)=sum_{d=1}^{min(n,m)} d sum_{i=1}^{left lfloor frac{n}{d} ight floor}sum_{j=1}^{left lfloor frac{m}{d} ight floor} varepsilon(gcd(i,j))=sum_{d=1}^{min(n,m)} d imes g(left lfloor frac{n}{d} ight floor, left lfloor frac{m}{d} ight floor) ]

    上面这个方法的意义在于,现在它可以用 (1 * mu = varepsilon) 了:

    [g(n,m)=sum_{i=1}^nsum_{i=1}^msum_{d|i, d|j} mu(d) ]

    于是我们又可以把它写成这样的形式:

    [g(n,m) = sum_{d=1}^{min(n,m)} mu(d) sum_{i=1}^nsum_{j=1}^m = sum_{d=1}^{min(n,m)} mu(d) left lfloor frac{n}{d} ight floor imes left lfloor frac{m}{d} ight floor ]

    这个式子已经可以 (O(n)) 求了。

    III. Tricks

    我们罗列一些方法、技巧、常见结论:

    1. (id = varphi * 1),例如上面那个 (gcd) 的式子,我们一开始就不用直接把 (gcd) 直接提出来,而是把它展开后提出来,这样可以省却很多测度中的条件:

    [f(n,m) = sum_{i=1}^nsum_{j=1}^msum_{d|i,d|j}varphi(d)=sum_{d=1}^{min(n,m)}varphi(d) left lfloor frac{n}{d} ight floor imes left lfloor frac{m}{d} ight floor ]

    1. (varepsilon = 1 * mu),这个式子可以解决很多测度中遇到的条件式,即 ([a = b] = [frac{a}{b} = 1]),这个的运用就很广泛了,所以不用举例。

    2. 给整除条件、(gcd) 等的式子约分,比如下面这两个:

    [sum_dsum_{i=1}^nsum_{j=1}^n[d|i,d|j] imes i imes j imes gcd(i,j) = sum_d d^3sum_{i=1}^{left lfloor frac{n}{d} ight floor}sum_{j=1}^{left lfloor frac{n}{d} ight floor}ijgcd(i,j) ]

    [sum_{i|n}sum_{j|m}sum_{x|i,x|j}d(x) = sum_{x|n, x|m}d(x)sum_{i|n}sum_{j|m}[x|i, x|j] = sum_{x|n, x|m}d(x) sum_{i|frac{n}{x}}sum_{j|frac{m}{x}}1 = sum_{x|n,x|m}d(x)d(frac{n}{x})d(frac{m}{x}) ]

    1. 利用辗转相减的式子首尾相加,如下面两个式子:

    [sum_{i=1}^n i [gcd(i,n)=1] = frac{nvarphi(n)}{2} ]

    [sum_{i=1}^n frac{icdot n}{gcd(i,n)} = frac{1}{2} cdot sum_{i=1}^{n-1} frac{n^2}{gcd(i,n)} +n ]

    1. $ d(icdot j)=sumlimits_{x mid i}sumlimits_{y mid j}[gcd(x,y)=1]=sumlimits_{p mid i,p mid j}mu(p)dleft(frac{i}{p} ight)dleft(frac{j}{p} ight)$,应用看这题:「SDOI2015」约数个数和

    2. (d = 1 * 1)(sigma = 1 * id),这个用于将含有这两个的式子展开来。

    未完待续......

    as 0.4123
  • 相关阅读:
    SPI通信协议(SPI总线)学习
    编译内核提示mkimage command not found – U-Boot images will not be built
    Ubuntu samba服务搭建
    Ubuntu telnet服务搭建
    嵌入式 PPPD工具实现3G拨号实践以及工具PPPD和CHAT详解摘录
    helloworld模块
    shell脚本文件判断
    git入门教程
    ILI9341支持32*32点阵英文字符(stm32)
    tft英文8*32尺寸字符库
  • 原文地址:https://www.cnblogs.com/Linshey/p/14176909.html
Copyright © 2011-2022 走看看