【读书笔记】莫比乌斯函数与莫比乌斯反演

一、莫比乌斯(Möbius)函数

  对于每个正整数n(n ≥ 2),设它的质因数分解式为:

  

  根据这个式子定义n的莫比乌斯函数为:

  

  也就是如果n有平方因子,则为0. 否则是-1的质因数个数次方。

  举个简单的例子:6 = 2 × 3,所以;  9 = 3×3, 所以

  【命题一】

  对于正整数n有:

  

  也就是n>2时,所有n的约数对应函数值之和为0.

  

  证明:

  n=1的时候是显然的。

  n≥2时:

  ① 如果d中也含有平方因子,则其值为零。

  ② 设 , 若d中不含平方因子,则必有.

  所以有:

  得证。

二、欧拉函数

  欧拉函数φ(n)定义为,1~n中与n的最大公约数为1的数字的个数。例如 φ(5) = 4, φ(6) = 2

  若p为质数,显然 φ(p) = p-1

  若n=pk, 则n的大于1的约数有p, 2p, 3p,...(pk-1-2)p, (pk-1-1)p共pk-1个数。所以φ(n) = pk-pk-1

  而且欧拉函数为积性函数(证明较为麻烦,略去),即若m、n互质,有φ(m)φ(n) = φ(mn)

  所以对于任意

  

  或者写成这种形式:

  

  

  莫比乌斯函数和欧拉函数的关系:

  

  这个不是太难证明,自己在纸上演算一下就明白了。

三、莫比乌斯反演

  若定义在正整数集上的两个函数,f(n)和g(n)满足对任意n有:

        (1)

  

  则可以通过f来表示g:

      (2)

  反之,亦可以由关系(2)得到(1)

  

  证明:

  由式(1)有:

  

  于是:

  

  对于确定的d‘,d将取遍所有的因子,所以我们可以改变求和顺序:

  

  由上面的推导可知:只有当即n = d‘时,等式右边才不为0。所以右边和式只剩下g(n)一项了。

  

  简单运用:

  上面说到莫比乌斯函数和欧拉函数的关系,

  变形为:

  视f(n) = n,  g(n) = φ(n), 上式相当于反演公式中的(2)式

  根据反演公式,可得到(1)式:

  

时间: 2024-10-19 06:16:43

【读书笔记】莫比乌斯函数与莫比乌斯反演的相关文章

莫比乌斯函数与莫比乌斯反演

莫比乌斯函数 定义 莫比乌斯函数\(\mu(n)\),当\(n=1\)时,\(\mu(n)=1\):当\(n>1\)时,设\(n\)的唯一分解式为\(n=p_1^{c_1}\cdots p_k^{c_k}\),则\(\mu(n)\)定义为 \(\mu(n)= \begin{cases} (-1)^k,c_1=c_2=\cdots=c_k=1 \\ 0, \exists\, c_i>1(1\leq i\leq k)\\ \end{cases}\) 性质 \(\sum\limits_{d|n}\m

Javascript读书笔记:函数定义和函数调用

定义函数 使用function关键字来定义函数,分为两种形式: 声明式函数定义: function add(m,n) { alert(m+n); } 这种方式等同于构造一个Function类的实例的方式: var add = new Function("m", "n", "alert(m+n);"); Function类构造方法的最后一个参数为函数体:"alert(m+n);",前面的都是函数的形参,参数必须是字符串形式的:&

我的读书笔记一函数作用域

函数作用域与全局作用域: var a=123; function f(){ alert(a); var a=1; alert(a); } f(); 很多人(包括我)都会觉得根据作用域来说函数内部可以访问局部变量和全局变量,运行结果应该是第一次弹出123,第二次弹出1;这是错误的. 运行的结果:第一次弹出undefined,第二次弹出1:这是因为上面的代码等价于: var a=123;function f(){ var a; //变量提升声明 alert(a); a=1; alert(a); }

【读书笔记】 函数柯里化

这是书上函数柯里化的例子 1 function curry(fn){ 2 var args = Array.prototype.slice.call(arguments, 1);//取出调用curry时除了第一个函数参数的后面所有参数; 3 return function(){ 4 var innerArgs = Array.prototype.slice.call(arguments);//取出第二次调用时的所有参数; 5 var finalArgs = args.concat(innerAr

python读书笔记之函数

函数的定义 def square_sum(a+b) c = a**2+b**2 print c 函数的功能是求两个数的平方和 return 可以返回多个值,相当于返回一个tuple return a,b,c 在Python中,当程序执行到return的时候,程序将停止执行函数内余下的语句.return并不是必须的,当没有return, 或者return后面没有返回值时,函数将自动返回None.None是Python中的一个特别的数据类型,用来表示什么都没有,相当于C中的NULL.None多用于关

Programming in Scala (Second Edition) 读书笔记6 函数和闭包

When programs get larger, you need some way to divide them into smaller, more manageable pieces. For dividing up control flow, Scala offers an approach familiar to all experienced programmers: divide the code into functions. In fact, Scala offers sev

JavaScript语言精粹读书笔记 - JavaScript函数

JavaScript是披着C族语言外衣的LISP,除了词法上与C族语言相似以外,其他几乎没有相似之处. JavaScript 函数: 函数包含一组语句,他们是JavaScript的基础模块单元,用于代码复用.信息隐藏和组合调用. 函数用于指定对象的行为. 函数对象Functions: 在JavaScript中函数就是对象.对象是"键值"对的集合并拥有一个连接到原型对象的隐藏连接. 对象字面量产生的对象连接到Object.prototype.函数对象连接到Function.prototy

线性筛+求莫比乌斯函数‘

莫比乌斯函数. 莫比乌斯函数是一个数论函数,它同时也是一个积性函数(i.e.μ(ab) =μ(a)μ(b), a,b互质) 当n不等于1时,n所有因子的莫比乌斯函数值的和为0, 莫比乌斯函数完整定义的通俗表达: 1)莫比乌斯函数μ(n)的定义域是N 2)μ(1)=1 3)当n存在平方因子时,μ(n)=0 4)当n是素数或奇数个不同素数之积时,μ(n)=-1 5)当n是偶数个不同素数之积时,μ(n)=1 code void get() { int n = 100; mu[1]=1; for(int

数论线性筛总结 (素数筛,欧拉函数筛,莫比乌斯函数筛,前n个数的约数个数筛)

线性筛 线性筛在数论中起着至关重要的作用,可以大大降低求解一些问题的时间复杂度,使用线性筛有个前提(除了素数筛)所求函数必须是数论上定义的积性函数,即对于正整数n的一个算术函数 f(n),若f(1)=1,且当a,b互质时f(ab)=f(a)f(b),在数论上就称它为积性函数,若a,b不互质也满足的话则称作完全积性函数,下面说明每个筛子是怎么筛的. 最基础的是素数筛,其它三个筛都是以素数筛为前提 素数筛 void get_prime() { int pnum = 0; for(int i = 2;