莫比乌斯反演

摘要:
数论函数定义域为正整数、陪域为复数的函数(phi(x)),欧拉函数也写作:(varphi(x))含义:小于等于自己的,与自己互质的数的个数通式:(phi(x)=xprodlimits_{p_i}(1-dfrac{1}{p_i})),其中(p_i)为(x)的质因数特殊性质:[sumlimits_{i|n}phi(i)=n]举个栗子证明理解一下:(12)个分数[dfrac{1}{12},dfrac{2
数论函数

定义域为正整数、陪域为复数的函数

(phi(x)),欧拉函数

也写作:(varphi(x))

含义:小于等于自己的,与自己互质的数的个数

通式:(phi(x)=xprodlimits_{p_i}(1-dfrac{1}{p_i})),其中(p_i)(x)的质因数

特殊性质:

[sumlimits_{i|n}phi(i)=n ]

举个栗子证明理解一下:

(12)个分数

[dfrac{1}{12},dfrac{2}{12},dfrac{3}{12},dfrac{4}{12},dfrac{5}{12},dfrac{6}{12},dfrac{7}{12},dfrac{8}{12},dfrac{9}{12},dfrac{10}{12},dfrac{11}{12},dfrac{12}{12} ]

约分一下

[dfrac{1}{12},dfrac{1}{6},dfrac{1}{4},dfrac{1}{3},dfrac{5}{12},dfrac{1}{2},dfrac{7}{12},dfrac{2}{3},dfrac{3}{4},dfrac{5}{6},dfrac{11}{12},dfrac{1}{1} ]

按分母分个类

[{dfrac{1}{1}},{dfrac{1}{2}},{dfrac{1}{3},dfrac{2}{3}},{dfrac{1}{4},dfrac{3}{4}},{dfrac{1}{6},dfrac{5}{6}},{dfrac{1}{12},dfrac{5}{12},dfrac{7}{12},dfrac{11}{12}} ]
[12=phi(1)+phi(2)+phi(3)+phi(4)+phi(6)+phi(12) ]

(mu(x)),莫比乌斯函数

[mu(x)=egin{cases}1(x=1)\(-1)^k ( ext{$x$没有平方数因数,且$x$的质因数个数为$k$,即$x=prodlimits_{p_iin prime} p_i$})\0 ( ext{$x$有平方数因数})end{cases} ]

特殊性质

[sumlimits_{i|n}mu(i)=[n=1] ]

(epsilon(x)),元函数

[epsilon(x)=[x=1] ]

(id(x)),单位函数

[id(x)=x ]

(I(x)),恒等函数

[I(x)=1 ]

也记作(1(x)=1)

积性函数

积性函数:对于任意互质的整数(a)(b),都有(f(ab)=f(a)cdot f(b))的函数(f)(f(1)=1)

完全积性函数:对于任意整数(a)(b) ,都有(f(ab)=f(a)cdot f(b))的函数(f)

以上提到的所有函数均为积性函数,其中(phi,mu)为积性函数,(epsilon,id,I)为完全积性函数

利用积性函数的性质,我们可以进行线性筛

狄利克雷卷积

定义两个数论函数的狄利克雷卷积(otimes(ast))

若$h=fast g $

[h(n)=sumlimits_{i|n}f(i)g(dfrac{n}{i}) ]

一定要记住这个式子

以下性质(看看就好):

  1. 交换律:(fast g=gast f)
  2. 结合律:(fast (gast h)=(fast g)ast h)
  3. 分配律:((f+g)ast h=f ast h+gast h)
  4. ((xf)ast g=x(fast g))
  5. (epsilonast f=f)

将上述(phi)(mu)的性质用卷积形式表示,就是

[sumlimits_{i|n}phi(i)=niff phi ast I = id ]
[sumlimits_{i|n}mu(i)=[n=1]iff mu ast I=epsilon ]
莫比乌斯反演
[g=fast I ]

两边同时卷一个(mu)

[gast mu=fast Iast mu=fast epsilon=f ]

(这步转化注意使用狄利克雷卷积的性质)

[g=fast Iiff gast mu=f ]

用式子表示,就是

[g(n)=sumlimits_{i|n}f(i)iff f(n)=sumlimits_{i|n}mu(dfrac{n}{i})g(i) ]

这个式子就是莫比乌斯反演

应用

(以下式子可以用莫比乌斯反演推,但是我懒)

[sumlimits_{i=1}^nsumlimits_{j=1}^m[gcd(i,j)=1] ]
[ecause[gcd(i,j)=1]=epsilon(gcd(i,j))=sumlimits_{d|gcd}mu(d) ]
[ ext{原式}=sumlimits_{i=1}^nsumlimits_{j=1}^msumlimits_{d|gcd}mu(d) ]

先枚举(d),即(gcd)的因数

[ ext{原式}=sumlimits_{d=1}^{min(n,m)}mu(d)sumlimits_{i=1}^{n}sumlimits_{j=1}^{m}[d|gcd(i,j)] ]
[=sumlimits_{d=1}^{min(n,m)}mu(d)sumlimits_{i=1}^{leftlfloorfrac{n}{d} ight floor}sumlimits_{j=1}^{leftlfloorfrac{m}{d} ight floor}1 ]
[=sumlimits_{d=1}^{min(n,m)}mu(d)leftlfloorfrac{n}{d} ight floorleftlfloorfrac{m}{d} ight floor ]

注意到(leftlfloordfrac{n}{d} ight floor)只有(sqrt n)种取值,整除分块((O(sqrt n)))加上预处理(mu(O(n))),可以处理多组询问

整除分块

  • (i)(leftlfloordfrac{n}{leftlfloordfrac{n}{i} ight floor} ight floor)这个范围内,(leftlfloordfrac{n}{i} ight floor)的值是一样的,(i)取到(leftlfloordfrac{n}{leftlfloordfrac{n}{i} ight floor} ight floor+1)时,(leftlfloordfrac{n}{i} ight floor)的值会变小

  • (leftlfloordfrac{n}{d} ight floor)只有(sqrt n)种取值

利用这个就可以做整除分块了

对于这个式子(sumlimits_{d=1}^{min(n,m)}mu(d)leftlfloorfrac{n}{d} ight floorleftlfloorfrac{m}{d} ight floor)

(i-min(leftlfloordfrac{n}{leftlfloorfrac{n}{i} ight floor} ight floor,leftlfloordfrac{m}{leftlfloorfrac{m}{i} ight floor} ight floor))的范围内,(leftlfloordfrac{n}{d} ight floorleftlfloordfrac{m}{d} ight floor)的值不变

(r=min(leftlfloordfrac{n}{leftlfloorfrac{n}{i} ight floor} ight floor,leftlfloordfrac{m}{leftlfloorfrac{m}{i} ight floor} ight floor))

那么这一段内的和就是(leftlfloordfrac{n}{d} ight floorleftlfloordfrac{m}{d} ight floorcdot sumlimits_{j=i}^{r}mu(j))

(mu)求一下前缀和,即可(O(1))算出(i-r)的和

inline long long solve(int n,int m){
	long long ans=0;
	for(int i=1,r;i<=min(n,m);i=r+1){
		r=min(n/(n/i),m/(m/i));
		ans+=1ll*(n/i)*(m/i)*(musum[r]-musum[i-1]);
	}
	return ans;
}

免责声明:文章转载自《莫比乌斯反演》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇xpath获取下一页,兄弟节点的妙用让Beyond Compare以网页形式显示文件就是这么简单下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Visual studio之C#实现数字输入模拟键盘

所以我想自己实现软键盘。这篇文章是来做记录的。在Load event表单中,添加所有标签控件的click event mybutton _ clicked,privatevoidlazerctrl _ Load{//注册键盘,单击事件keyb1。单击+=newEventHandler;keyb2。单击+=newEventHandler,keyb3。单击++=...

Spark 数据读取与保存(输入、输出)

SaveAsTextFile(字符串)scala&gt:importsscala.util.parsing.json.json(2)将json文件上载到HDFS[lxl@hadoop102spark]$hadoopfs投入。/示例/src/main/resources/people。json/(3)读取文件scala&gt;...

Sublime Text3注册激活和部分配置

此时,我们可以输入要安装的插件包ConvertToUTF85。设置中文对齐方式、字体等//设置默认代码“default_encoding”:“UTF-8”,//显示代码“show_encoding”:true,//显示行号“show_line_endings”:true,//设置字号“font_size”:14,//设置字体对齐方式“font_options...

node.js

而同样,Node也提供了child_process.fork来创建Node的子进程。请参考文章后的multi-node的性能测试,可以看到在多Node进程的情景下,响应请求的速度被大幅度提高。在文章的写作中,Node最新发布的0.5.10版本新增了cluster启动参数。参数的使用方式如下:nodeclusterserver.js启动Node的时候,在附加了...

愿你走出半生,归来仍是Java Parser

几天前,我的一个朋友给了我一个Haskell问题嘿,MK。假设我有一个BNF,我在Haskell中有一个这个BNF的解析器。现在,我想为这个BNF换一条线。是否有任何方法可以在不接触BNF解析器代码的情况下扩展BNF解析器?让我们想想,这个x是什么样的变体?请记住,传入的参数不是self,而是super。好了,openrecursion已经准备好了,剩下的是...

安卓系统中各镜像介绍

背景对于安卓开发而言,了解各镜像的意义、内容以及如何制作,有极大的意义。系统镜像对应的文件名一般叫system.img。当然,系统镜像的文件可以任意命名,之所以叫system.img是为了与生成镜像文件之前的system目录保持一致,这样比较容易与其他类型的镜像文件区分。另外,高版本Android的system.img通常是ext4格式的文件系统镜像,可以使...