莫比乌斯函数总结

性质:\(\sum_{d|n}\mu(d)=[n==1]\)

这个可以用组合数的性质来证,形象点的话就是杨辉三角。

因为恒等式:\(\sum_{i=0}^{n}(-1)^nC_{n}^{i}=0\).

莫比乌斯反演:

形式一:

已知:\(g(n)=\sum_{d|n}f(d)\),则有:\(f(n)=\sum_{d|n}\mu(d)g(\frac{n}{d})\).

证明如下:

\[\sum_{d|n}\mu(d)g(\frac{n}{d})=\sum_{d|n}\mu(d)\sum_{k|\frac{n}{d}}f(k)

\]

交换求和次序,有:

\[\begin{aligned}

&\sum_{d|n}\mu(d)\sum_{k|\frac{n}{d}}f(k)\\

=&\sum_{k|n}f(k)\sum_{d|\frac{n}{k}}\mu(d)\\

=&\sum_{k|n}f(k)[\frac{n}{k}=1]=f(n)

\end{aligned}

\]

故得证.

形式二:

已知:\(g(n)=\sum_{n|d}f(d)\),则有:\(f(n)=\sum_{n|d}\mu(\frac{d}{n})g(d)\).

证明如下:

令\(k=\frac{d}{n}\),则有:

\[\begin{aligned}

&\sum_{n|d}\mu(\frac{d}{n})g(d)\\

=&\sum_{k=1}^{\infty}\mu(k)g(nk)\\

=&\sum_{k=1}^{\infty}\mu(k)\sum_{nk|t}f(t)

\end{aligned}

\]

交换求和次序,有:

\[\begin{aligned}

&\sum_{k=1}^{\infty}\mu(k)\sum_{nk|t}f(t)\\

=&\sum_{n|t}f(t)\sum_{k|\frac{t}{n}}\mu(k)\\

=&\sum_{n|t}f(t)[\frac{t}{n}=1]=f(n)

\end{aligned}

\]

故得证.

常用技巧(应用):

一个性质:

\[\lfloor\frac{\lfloor\frac{x}{a}\rfloor}{b}\rfloor=\lfloor\frac{x}{ab}\rfloor

\]

证明如下:

令\(y=\lfloor\frac{x}{a}\rfloor,z=\lfloor\frac{x}{ab}\rfloor\),显然有:\(x=zab+c,c\leq ab\).

等式两边同时除以\(a\)并向下取整有:\(y=zb+\lfloor\frac{c}{a}\rfloor\).

再同时除以\(b\)并向下取整:\(\lfloor\frac{\lfloor\frac{x}{a}\rfloor}{b}\rfloor=z+\lfloor\frac{\lfloor\frac{c}{a}\rfloor}{b}\rfloor\).

之后就比较显然了。

整除分块:

整除分块经常在相关数论问题中用到,主要是用来解决下列求和式:

\[\sum_{i=1}^{n}\lfloor\frac{n}{i}\rfloor

\]

证明我就不写了,就说点有用的性质吧:

对于\(1\leq i\leq n\),\(\lfloor\frac{n}{i}\rfloor\)只有至多\(2\sqrt{n}\)个不同取值。

对于任一\(x\),当\(x\leq i\leq \lfloor\frac{n}{\lfloor\frac{n}{x}\rfloor}\rfloor\)时,\(\lfloor\frac{n}{i}\rfloor\)的值都相等。

有了上面两个性质,那么可以加速求和式,复杂度为\(\sqrt{n}\)。

例一:

求:\(\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)=1]\).

\[\begin{aligned}

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

=&\sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{d|gcd(i,j)}\mu(d)\\

=&\sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{d|i,d|j}\mu(d)

\end{aligned}

\]

说明一下:从第一步到第二步多出来一个和式,就相当于一个容斥的过程,考虑所有的\((i,j)\),对于他们的\(gcd\)来进行容斥:先加上所有的情况,然后减去\(gcd\)为\(2,3,5...\)倍数的情况,但会多减,所以加回来。

之后再进行变换得:

\[\begin{aligned}

&\sum_{d}\mu(d)\sum_{i=1}^{n}\sum_{d|i}\sum_{j=1}^{m}\sum_{d|j}\\

=&\sum_{d}\mu(d)\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor

\end{aligned}

\]

后面的部分直接整除分块,然后预处理\(\mu\)的前缀和就行了。

例二:

求:\(\sum_{i=1}^{n}\sum_{j=1}^{m}gcd(i,j)\)

这个和第一个比较类似,我们变化一下就有:

\[\begin{aligned}

&\sum{d}\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)=d]\\

=&\sum{d}\sum_{i=1}^{\frac{n}{d}}\sum_{j=1}^{\frac{m}{d}}[gcd(i,j)=1]

\end{aligned}

\]

根据例一得:

\[\begin{aligned}

&\sum{d}\sum_{i=1}^{\frac{n}{d}}\sum_{j=1}^{\frac{m}{d}}[gcd(i,j)=1]\\

=&\sum{d}\sum_t\mu(t)\lfloor\frac{n}{dt}\rfloor\lfloor\frac{m}{dt}\rfloor

\end{aligned}

\]

令\(T=dt\),则上式可化为:

\[\begin{aligned}

=&\sum{\frac{T}{t}}\sum_{t}\mu(\frac{T}{d})\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor\\

=&\sum_{T}\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor\sum_{t|T}\mu(t)\frac{T}{t}\\

=&\sum_T\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor\varphi(T)

\end{aligned}

\]

说说为什么最后转化为了欧拉函数:

欧拉函数有个十分有用的性质:\(\sum_{d|n}\varphi(d)=n\),证明的话主要从\(f(n)=\sum_{d|n}\varphi(d)\)这个函数为积性函数入手。同时还有两个个性质也比较有用:一个是\(\varphi(p^m)=p^m-p^{m-1}\),另一个是小于\(n\)的数中,与\(n\)互质的数的和为\(\frac{n\varphi(n)}{2},n>1\),为什么呢?因为有\(gcd(m,n)=gcd(n,n-m),所以是成对的~\)。

回到正题,有了这个式子反演一下就有:

\[\varphi(n)=\sum_{d|n}\mu(d)\frac{n}{d}

\]

对于例二,整除分块+预处理欧拉函数就行了。

题意:

求\(\sum_{i=1}^n\sum_{j=1}^m lcm(i,j)\)。

思路:

推导过程如下:

\[\begin{aligned}

&\sum_{i=1}^n \sum_{j=1}^m lcm(i,j)\\

=&\sum_{i=1}^n \sum_{j=1}^m \frac{ij}{gcd(i,j)}\\

=&\sum_d\sum_i\sum_j\frac{ij}{d}(gcd(i,j)=d)\\

=&\sum_d\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}ijd(gcd(i,j)=1)\\

=&\sum_dd\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}ij(gcd(i,j)=1)

\end{aligned}

\]

后面部分是不是很熟悉,我们先求\(sum(n,m)=\sum_i\sum_jij(gcd(i,j)=1)\).

按照套路,有:

\[\begin{aligned}

sum(n,m)=&\sum_i\sum_jij\sum_{d|gcd(i,j)}\mu(d)\\

=&\sum_d d^2\mu(d)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}ij

\end{aligned}

\]

后面部分为两个等差数列求和,显然可以直接数论分块来搞。

回到原式:

\[\sum_d d\cdot sum(\lfloor\frac{n}{d}, \frac{m}{d}\rfloor)

\]

发现这后面也可以数论分块搞,所以就是分块套分块,总复杂度为\(O(n)\)。

Code

#include

using namespace std;

typedef long long ll;

const int N = 1e7 + 5, MOD = 20101009;

int n, m;

int mu[N], p[N], sum[N];

bool chk[N];

void init() {

mu[1] = 1;

int cnt = 0, k = min(n, m);

for(int i = 2; i <= k; i++) {

if(!chk[i]) p[++cnt] = i, mu[i] = -1;

for(int j = 1; j <= cnt && i * p[j] <= k; j++) {

chk[i * p[j]] = 1;

if(i % p[j] == 0) {mu[i * p[j]] = 0; break;}

mu[i * p[j]] = -mu[i];

}

}

for(int i = 1; i <= k; i++) sum[i] = ((sum[i - 1] + 1ll * mu[i] * i * i % MOD) % MOD + MOD) % MOD;

}

int Sum(int x) {

return 1ll * x * (x + 1) / 2 % MOD;

}

int calc(int n, int m) {

int ans = 0;

for(int i = 1, j; i <= min(n, m); i = j + 1) {

j = min(n / (n / i), m / (m / i));

ans = (ans + 1ll * (sum[j] - sum[i - 1] + MOD) * Sum(n / i) % MOD * Sum(m / i) % MOD) % MOD;

}

return ans;

}

int solve(int n, int m) {

int ans = 0;

for(int i = 1, j; i <= min(n, m); i = j + 1) {

j = min(n / (n / i), m / (m / i));

ans = (ans + 1ll * (i + j) * (j - i + 1) / 2 % MOD * calc(n / i, m / i) % MOD) % MOD;

}

return ans;

}

int main() {

#ifdef heyuhhh

freopen("input.in", "r", stdin);

#else

ios::sync_with_stdio(false); cin.tie(0);

#endif

cin >> n >> m;

init();

cout << solve(n, m);

return 0;

}

c莫比乌斯函数_莫比乌斯函数总结相关推荐

  1. c语言程序 中断函数示例,单片机_C语言函数_中断函数(中断服务程序)

    c语言中的中断函数注意事项 单片机_C语言函数_中断函数(中断服务程序) 在开始写中断函数之前,我们来一起回顾一下,单片机的中断系统. 中断的意思(学习过微机原理与接口技术的同学,没学过单片机,也应该 ...

  2. java 箭头函数_箭头函数丶Java教程网-IT开发者们的技术天堂

    基本用法 在ES6中允许使用 => 来定义函数,如下: var f = a => a; console.log(f(1)); //1 就等同于 var f = function(a){ r ...

  3. c++ error函数_回调函数地狱

    学习异步JS的时候最头大的就是看到一层一层嵌套的函数回调.每次看到就一万个wtf/wth在心中飘过.当然,不仅我一个人这样.外国的同行称之为:Callback Hell---回调函数地狱.如果谷歌一下 ...

  4. python虚函数_虚函数和纯虚函数的区别

    首先:强调一个概念 定义一个函数为虚函数,不代表函数为不被实现的函数. 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数. 定义一个函数为纯虚函数,才代表函数没有被实现. 定义纯虚函数是为了实 ...

  5. java中钩子函数回调函数_钩子函数和回调函数

    一般认为,钩子函数就是回调函数的一种,其实还是有差异的,差异地方就是:触发的时机不同. 先说钩子函数: 钩子(Hook)概念源于Windows的消息处理机制,通过设置钩子,应用程序对所有消息事件进行拦 ...

  6. python 如何调试函数_使用函数 - python断点调试方法

    清单 7. 使用函数的例子 import pdb def combine(s1,s2): # define subrouTIne combine, which... s3 = s1 + s2 + s1 ...

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

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

  8. 自定义函数_自定义函数,让你的表格为所欲为

    自定义函数可以做什么?可以让你的表格为所欲为! 这篇文章教你如何掌握自定义函数. 函数是大家在使用 Excel 工作的过程中经常会用到的. 比如大家已经很熟悉了的求和函数 SUM,计数函数 COUNT ...

  9. python callback函数_回调函数callbacks

    TensorFlow的中阶API主要包括: 数据管道(tf.data) 特征列(tf.feature_column) 激活函数(tf.nn) 模型层(tf.keras.layers) 损失函数(tf. ...

最新文章

  1. 人脸识别中的rank-n
  2. 如何选择SSL 证书服务
  3. 未能加载程序集或它的一个依赖项_英伟达发布kaolin:一个用于加速3D深度学习研究的PyTorch库...
  4. Re:从零开始的Spring Session(二)
  5. ip integrator_使用Oracle Data Integrator(和Kafka / MapR流)完善Lambda体系结构
  6. after you've written your business model
  7. Docker(四) Dockerfile 详解
  8. Hadoop2.2.0--Hadoop Federation、Automatic HA、Yarn完全分布式集群结构
  9. vue中index.html文件为什么可以使用模板语法
  10. 移动端日历组件设计与实现
  11. vlan是什么?如何划分vlan?如何实现vlan?使用vlan的优点!
  12. pwnthebox-rip
  13. 结对项目——可循环的最大子数组
  14. 【论文翻译】ADVIO: An Authentic Dataset for Visual-Inertial Odometry
  15. 数据结构—冒泡排序 C语言代码实现(从前向后/从后向前两种)
  16. iOS 所需英语词汇整理
  17. Enet学习(三)--enet_host_service
  18. 【网络】路由器和无线路由器就这么配置
  19. 2022年全球市场水果去皮机和榨汁机总体规模、主要生产商、主要地区、产品和应用细分研究报告
  20. 苹果浏览器safari打不开网页怎么办?参考方法在这!

热门文章

  1. MySQL 注释方法
  2. jsp+servlet开发的在线杂志封面制作源码
  3. CRichEdit或CEdit动态自动换行
  4. 鸿蒙安卓8,安卓VS鸿蒙第三方件切换宝典 V2.0(第一部分)
  5. 解决idea热部署问题
  6. 业绩考核才是股权激励的基础
  7. 创龙基于TI AM335x ARM Cortex-A8 CPU,主频高达1GHz开发板FRAM、电源接口和拔码开关
  8. android邮件系统uml建模,软件设计UML分析--邮件管理系统.ppt
  9. 国瀚实业|互联网投资理财公司安全吗
  10. 什么才叫真正的会做人,会做事?