首页 > 其他分享 >比较厉害的积性函数求和

比较厉害的积性函数求和

时间:2024-02-19 13:34:28浏览次数:28  
标签:函数 limits min 积性 dfrac sum 求和 ln gcd

听 zak 讲的,感觉很厉害。

给定一个积性函数 \(S\),可以快速计算 \(S(p^k)\),求 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^mS(ij)\)。

把 \(n,m\) 当作同阶。

我们考虑枚举 \(i,j\) 的 \(\gcd\)。

\(\sum\limits_{g=1}^{\min(n,m)}\sum\limits_{i=1}^{n/g}\sum\limits_{j=1}^{m/g}S(ijg^2)[\gcd(i,j)=1]\)。

我们先考虑如何处理 \(S(ijg^2)\)。

我们记 \(H(i)=\dfrac{S(g^2i)}{S(g^2)}\),我们知道它是积性的。

考虑 \(a,b\),满足 \(\gcd(a,b)=1\)。
\(H(a)\times H(b)=\dfrac{S(g^2a)}{S(g^2)}\times \dfrac{S(g^2b)}{S(g^2)}=\dfrac{S(g^2a)S(g^2b)}{S(g^2)^2}\)
又因为对于积性函数,有 \(S(a)\times S(b)=S(\gcd(a,b))\times S(\operatorname{lcm}(a,b))\)。
\(H(a)\times H(b)=\dfrac{S(g^2a)S(g^2b)}{S(g^2)^2}=\dfrac{S(\gcd(g^2a,g^2b))\times S(\operatorname{lcm}(g^2a,g^2b))}{S(g^2)^2}=\dfrac{S(g^2)S(g^2ab)}{S(g^2)^2}=\dfrac{S(g^2ab)}{S(g^2)}=H(ab)\)。

所以我们可以将 \(S(ijg^2)\) 替换成 \(H(ij)S(g^2)\)。

\(\sum\limits_{g=1}^{\min(n,m)}\sum\limits_{i=1}^{n/g}\sum\limits_{j=1}^{m/g}H(ij)S(g^2)[\gcd(i,j)=1]\)。

将 \(S(g^2)\) 提出来:\(\sum\limits_{g=1}^{\min(n,m)}S(g^2)\sum\limits_{i=1}^{n/g}\sum\limits_{j=1}^{m/g}H(ij)[\gcd(i,j)=1]\)。

因为 \(\gcd(i,j)=1\) 才会做出贡献,所有可以认为 \(H(ij)=H(i)H(j)\)。

然后在进行常规的推式子:

\[\begin{aligned} \text{原式}=&\sum\limits_{g=1}^{\min(n,m)}S(g^2)\sum\limits_{i=1}^{n/g}\sum\limits_{j=1}^{m/g}H(i)H(j)[\gcd(i,j)=1]\\ =&\sum\limits_{g=1}^{\min(n,m)}S(g^2)\sum\limits_{i=1}^{n/g}\sum\limits_{j=1}^{m/g}H(i)H(j)\sum\limits_{t|i,t|j}\mu(t)\\ =&\sum\limits_{g=1}^{\min(n,m)}S(g^2)\sum\limits_{t=1}^{\min(n,m)/g}\mu(t)\sum\limits_{i=1}^{n/gt}H(it)\sum\limits_{j=1}^{m/gt}H(jt) \end{aligned} \]

现在的问题就是形如所有的 \(t=1,2\dots k\),求出 \(\sum\limits_{i=1}^{n/gt}H(it)\),相当于 \(\sum\limits_{i=1}^{n/g}[t|i]H(i)\),也就是迪利克雷后缀和的形式,使用迪利克雷后缀和,时间复杂度为 \(O(\dfrac{n}{g}\ln\ln n)\)。

我们现在就需要对 \(i=1,2\dots n/g\),求出 \(H(i)\) 的点值。

具体的,我们求出所有 \(i=p^k\) 出的点值即可(其中 \(p\) 为质数)。

也就是要计算 \(\dfrac{S(g^2p^k)}{S(g^2)}\) 的值。

我们讨论 \(p\) 和 \(g\) 的关系:

  • 如果 \(p|g\),设 \(p^i|g\) 且 \(p^{i+1}\nmid g\),则 \(S(g^2p^k)=S(\operatorname{lcm}(g^2,p^{2j+k}))=\dfrac{S(g^2)S(p^{2j+k})}{S(\gcd(g^2,p^{2j+k}))}=\dfrac{S(g^2)S(p^{2j+k})}{S(p^{2j})}\),有 \(H(p^k)=\dfrac{S(p^{2j+k})}{S(p^{2j})}\)。
  • 如果 \(p\nmid g\),则 \(S(g^2p^k)=S(g^2)\times S(p^k)\),有 \(H(p^k)=S(p^k)\)。

发现所有 \(H(p^k)\) 都可以快速计算,然后 \(O(n/g)\) 吧所有点值计算出来即可。

时间复杂度为 \(\sum\limits_{i=1}^{\min(n,m)}O(\dfrac{n}{i}\ln\ln n)=O(n\ln n\ln\ln n)\)。

标签:函数,limits,min,积性,dfrac,sum,求和,ln,gcd
From: https://www.cnblogs.com/Xun-Xiaoyao/p/18020302

相关文章

  • 2 分钟,了解 4 个极为有用的 MetricsQL 函数
    夜莺社区的朋友如果问时序库的选型,我一般都会推荐VictoriaMetrics,除了其性能、稳定性、集群扩展能力之外,VictoriaMetrics还扩展了PromQL,提供了MetricsQL,即增强了PromQL的能力。比如下面介绍的场景,就很适合用MetricsQL来解决。需求某个指标(假设指标名字是interface_sta......
  • nativeUI页面table列表显示,render渲染函数
    {key:'type',title:$t('cmdType'),width:150,align:'center',render(t){switch(t.type){case2:returnh('span',{......
  • python函数传参
    python函数传参参考:python函数参数传递(params,*params,**params)位置参数常见的函数参数:defadd_both(x,y):returnx+y默认参数defenroll(name,gender,age=6,city='Beijing'):print('name:',name)print('gender:',gender)print(&......
  • 2024-02-18-物联网C语言(7-字符串处理函数)
    7.字符串7.1获取字符串的长度函数-strlen头文件:#include<string.h>函数定义:size_tstrlen(constchar*s)参数:s-指定的字符串返回值:当前字符串的长度#include<stdio.h>#include<string.h>intmain(intargc,charconst*argv[]){//使用strlen获取字符......
  • 请编写函数fun,它的功能是:求出1到100之内能被7或者11整除, 但不能同时被7和11整除的所有
    /2.请编写函数fun,它的功能是:求出1到100之内能被7或者11整除,但不能同时被7和11整除的所有整数,并将他们放在a所指的数组中,通过n返回这些数的个数/#include<stdio.h>#include<string.h>intfun(int*buf){inti=1,j=0;for(i=1;i<100;i++){if(i%7==......
  • 1.m个人的成绩存放在score数组中,请编写函数fun, 它的功能是:将低于平均分的人数作为函
    /1.m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指1定的数组中。/#include<stdio.h>#include<string.h>intfun(int*buf,int*buff,intnum){inti=0,j=0,sum=0;for(i=......
  • [python] 内置函数: zip()
    zip()作用将复数个可循环类型(iterables)中的元素组装为一组tuple;组装规则是根据各自所在的位置决定;当最短的可循环类型内已经没有元素的时候,组装终止传入参数以及返回类型参数是可循环的数据类型,例如数组,元组,字符串等返回类型是搭载复数元组的某种可循环类型......
  • VB Open 函数详解 打开、关闭、读、写文件
    (一)打开和关闭文件    1、顺序文件    打开顺序文件,我们可以使用Open语句。它的格式如下:OpenpathnameFor[Input|Output|Append]As[#]filenumber[Len=buffersize]     说明:    (1)参数pathname表示要打开的文件名,文件名可以包含有驱动器和目录 ......
  • 【Flink】复函数的使用,时间服务和定时器,值、列表、字典状态变量
    【Flink】复函数的使用,时间服务和定时器,值、列表、字典状态变量文章目录一FlinkDataStreamAPI1复函数2自定义输出到下游设备二处理函数1KeyedProcessFunction的使用(1)时间服务和定时器2状态变量(1)值状态变量a需求一b需求二(2)列表状态变量(3)字典状态变量一Fl......
  • 2024-02-17-物联网C语言(3-函数)
    3.函数3.1函数的概念函数是c语言的功能单位,实现一个功能可以封装一个函数实现。定义一个函数的时候需要一切以功能为目的,根据功能去定义函数的参数和返回值。3.2函数的分类3.2.1从定义角度分类库函数(c库实现)自定义函数(程序员自定义函数)系统调用(操作系统实现的函数)3.......