mobius反演的本质是容斥原理,这在《组合数学》里面有提到

基本公式定理

  1. mobius反演公式

    F(n)f(n)=∑d∣nf(d)=∑d∣nμ(n/d)F(d)=∑d∣nμ(d)F(n/d)

    \begin{align}F(n) &= \sum_{d\mid n}f(d)\\f(n)&=\sum_{d\mid n}\mu(n/d)F(d)\\&=\sum_{d\mid n}\mu(d)F(n/d)\\\end{align}
    另一种描述:

    F(d)f(d)=∑d∣nf(n)=∑d∣nF(n)μ(n/d)

    \begin{align}F(d)&=\sum_{d\mid n}f(n)\\f(d)&=\sum_{d\mid n}F(n)\mu(n/d)\end{align}

  2. 经典公式

    nϕ(n)∑d∣nμ(d)=∑d∣nϕ(d)=∑d∣nμ(d)nd=(n==d)

    \begin{align}n &= \sum_{d\mid n}\phi(d)\\\phi(n)&=\sum_{d\mid n}\mu(d)\frac nd\\\sum_{d\mid n}\mu(d) &=(n==d)\end{align}

线性筛

我们可以用线性筛法处理积性函数,简单的说就是用每次用合数最小质因子去筛掉它,这能保证O(n)O(n)的时间复杂度,详细的证明请见文末参考文献。可是对于和性的函数我们也可以这样晒去.

void monius(){cnt =0;mu[1] = 1;memset(prime,0,sizeof(prime));for(int i = 2 ; i<maxn ; ++i){if(!prime[i]){prime[cnt++] = i;mu[i] =-1;}for(int j=0 ; j<cnt && i*prime[j]<maxn ; ++j){prime[i*prime[j]] = 1;if(i%prime[j])mu[prime[j]*i] = -mu[i];else {mu[i*prime[j]] = 0;break;}}}sum_mu[0] = 0;for(int i=1 ; i<maxn ; ++i)sum_mu[i] = sum_mu[i-1]+mu[i];
}
void phi_table(){cnt =0;phi[1] = 0;memset(prime,0,sizeof(prime));for(int i = 2 ; i<maxn ; ++i){if(!prime[i]){prime[cnt++] = i;phi[i] =i-1;}for(int j=0 ; j<cnt && i*prime[j]<maxn ; ++j){prime[i*prime[j]] = 1;if(i%prime[j])phi[prime[j]*i] = phi[i]*(phi[prime[j]]);else {phi[i*prime[j]]= phi[i]*prime[j];break;}}}
}

分块求和

如果说计算式中出现了 ∑if(i)∗g(⌊(n/i)⌋)\sum_if(i)*g(\lfloor(n/i)\rfloor),则由于 ⌊ni⌋\lfloor\frac{n}{i}\rfloor的取值只有 O(n√)O(\sqrt n) 种显然我们可以运用分段求和(可以打印出这样的值来看一下)记录ff的前缀和,然后g就进行分段求和.
这是mobius中的常见的优化.

ll F(int n, int m, int d) {if (n > m) swap(n, m);ll ans = 0;n /= d, m /= d;for (int i = 1, last = 1; i <= n; i = last + 1) {last = min(n / (n / i), m / (m / i));ans += (ll)(sum[last] - sum[i - 1]) * (n / i) * (m / i);}return ans;
}

gcd相关

mobius最广的应用就是gcd相关的求和问题.

∑a≤N,b≤Mgcd(a,b)=1\sum_{a\le N,b\le M}gcd(a,b)=1

令f(d)=:gcd(a,b)=d的个数(a≤N,b≤M),F(d)=:d∣gcd(a,b)的个数f(d)=:gcd(a,b)=d的个数(a\le N,b\le M),F(d)=:d\mid gcd(a,b)的个数.显然有

F(d)F(d)f(d)=⌊N/d⌋∗⌊M/d⌋=∑d∣gcd(a,b)=nf(n)=∑d∣nμ(n/d)F(n)=∑x=1⌊N/d⌋u(x)F(dx)=∑x=1⌊N/d⌋u(x)⌊Ndx⌋∗⌊Mdx⌋

\begin{align} F(d) &= \lfloor N/d \rfloor*\lfloor M/d \rfloor \\ F(d)&=\sum_{d\mid gcd(a,b)=n}f(n)\\ f(d)&=\sum_{d\mid n}\mu(n/d)F(n)\\ &=\sum_{x=1}^{\lfloor N/d \rfloor}u(x)F(dx)\\ &=\sum_{x=1}^{\lfloor N/d \rfloor}u(x)\lfloor \frac {N}{dx}\rfloor*\lfloor \frac{M}{dx}\rfloor \end{align}
显然将d设为就是求解d为1的问题,同时,若d为1我们也可以将其转化为 ⌊N/d⌋,⌊M/d⌋ \lfloor N/d \rfloor,\lfloor M/d \rfloor规模下d=1的问题.,不过需要说明的问题是我们可以用分块求和这样就能在 n√\sqrt n的复杂度解决这个问题了.
例题:
2301
格点可视性问题

∑f(d)∑⌊N/d⌋d|nF(n)\sum f(d)\sum_{d|n}^{\lfloor N/d \rfloor}F(n)

这个就必修使用双分套分块求和以达到O(n)O(n)的复杂度了.
可以参考文献33.
例题:
能量采集

筛出每一个gcd(a,b)=d的个数 d=1,2,…,nd = 1,2,\dots ,n

这个题目不需要mobius也能解决,主要是筛法应用.
题目:
GCD of Sequence.

参考
从N往1,运用筛法O(nlgn)O(nlgn)

一个分块求和的例子

Mophues
这个题目就是用了分块求和,求出对于每一个计算⌊N/j⌋\lfloor N/j \rfloor的mobius贡献,再运用分块求和再n√\sqrt n处理询问.

参考文献:

贾智鹏 线性筛
ACDreamer
sengxian’s blog

莫比乌斯(mobius)笔记相关推荐

  1. 莫比乌斯函数_莫比乌斯环:python-matplotlib可视化实现

    1 说明: ===== 1.1 莫比乌斯环:mobius strip,又叫莫比乌斯带. 1.2 公元1858年,德国数学家莫比乌斯(Mobius,1790~1868)和约翰·李斯丁发现. 图片来自网络 ...

  2. 莫比乌斯带catia建模_用sw2018制作莫比乌斯环图文教程

    概述: 莫比乌斯环的概念来自于莫比乌斯带,公元1858年,德国数学家莫比乌斯(Mobius,1790-1868)和约翰·李斯丁发现:把一根纸条扭转180°后,两头再粘接起来做成的纸带圈,具有魔术般的性 ...

  3. 狄利克雷卷积_狄利克雷卷积学习笔记

    蒟蒻我在莫比乌斯反演学习笔记里留下了几个坑,于是开始漫长的填坑路. 狄利克雷卷积学习笔记 前置知识1:数论函数 什么是数论函数呢?数论函数指定义域为正整数,陪域为复数的函数. 以下知识中涉及到的函数大 ...

  4. matlab 莫比乌斯曲面,神奇的莫比乌斯带,只有一个曲面可以无限循环

    人们都说学无止境,知识是无穷无尽的,总是存在着许多新奇的知识是我们所不了解的.就像莫比乌斯带一样,竟然有着魔术般的神奇性质,能够折成一个曲面,如果放上一只小虫子的话,小虫子可以在上面无限循环的一直爬. ...

  5. 莫比乌斯函数---C++

    [问题描述] 莫比乌斯函数,数论函数,由德国数学家和天文学家莫比乌斯(Mobius,1790-1868)提出.梅滕斯(Mertens)首先使用μ(n)作为莫比乌斯函数的记号.而据说,高斯(Gauss) ...

  6. 请叫我En-Tan-Mo

    我叫En-Tan-Mo,很高兴认识你. 什么tanmo??? 我叫En-Tan-Mo,很高兴认识你. en什么mo??? 我叫En-Tan-Mo,很高兴认识你. entan什么?? emmmm 以上场 ...

  7. 「Note」Math not for OI

    大家以我为戒 千万不要这么学 oi ( todolist 会越鸽越长的 高代那部分莫名其妙写了一大堆 其实我写完之后也没复习过几遍.. 而且千万不要抄看起来很厉害实际上也很厉害的东西抄爽了,, 更不要 ...

  8. 【算法笔记】莫比乌斯反演(包含定理,两种形式的证明及入门经典模板)

    整理的算法模板合集: ACM模板 目录 一.莫比乌斯反演 二.几个概念和定理 三.两种形式的莫比乌斯反演证明 四.POJ 3904 Sky Code(入门例题) 一.莫比乌斯反演 学习笔记,我是看这个 ...

  9. 莫比乌斯反演专题学习笔记

    莫比乌斯反演专题学习笔记 本文记录一些和莫反有关的内容的笔记 可能存在诸多谬误,阅读时请谨慎分析 若发现文中有谬误,如您愿意,恳请您向我指出,不胜感激! 为什么要学莫比乌斯反演? 解决一类与狄利克雷卷 ...

最新文章

  1. iOS--优秀博客记录
  2. 极大似然估计_计量经济学 | 极大似然估计
  3. 方舟服务器如何修改恐龙,方块方舟人物及驯养恐龙属性修改教程 人物属性怎么修改_游侠网...
  4. Asp中解决AJAX乱码问题
  5. linux下find查找带有指定权限的文件(windows下编译的源代码文件)
  6. ASP.NET MVC (一、控制器与视图)
  7. 利用snmptools实现cacti自定义监控Windows性能计数器
  8. jetty优秀文章转载
  9. 用python求两个人的平均身高_黄哥Python:分治算法(Divide-and-Conquer)
  10. Ubuntu执行脚本报错-bash: ./send.py: /usr/bin/python: bad interpreter: Permission denied
  11. uoj#267. 【清华集训2016】魔法小程序(乱搞)
  12. (day 52 - 先序后序遍历计数 ) 剑指 Offer 55 - II. 平衡二叉树
  13. 对 /etc/rc.d/init.d 目录的一点理解
  14. atitit.数据验证--db数据库数据验证约束
  15. matlab2016a安装
  16. 游戏计算机代码大全,DNF各类错误代码大全及解决方法
  17. 随机数生成器(RNG, random number generator)
  18. 查看本机mysql安装信息
  19. 电脑连接手机热点时,电脑能够搜到但是却连接不上的问题
  20. word读入富文本编辑器,编辑后导出下载word日常总结

热门文章

  1. html中文本重复,在网页中去除文本列表中重复行与计算重复次数的代码原理
  2. PADS Logic 原理图连接
  3. 卡特兰数 Catalan数
  4. 5.MCScanX 与circos下载、安装、运用
  5. matplotlib的读书笔记
  6. Linux中根据文件大小排序
  7. numpy数组array的shape属性-1维、2维···
  8. BLAM源码解析(二)—— 从激光回调入手
  9. 鲍威尔讲话打击美元指数 国际金价大幅上涨
  10. 美元指数是什么,为什么会对伦敦金有影响