博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
莫比乌斯反演题目列表及题解
阅读量:7015 次
发布时间:2019-06-28

本文共 10666 字,大约阅读时间需要 35 分钟。

前言:

本题表中,凡是涉及\(n、m\),都默认\(n \leq m\)

如果你连莫比乌斯求\(\sum_{i=1}^n \sum_{j=1}^m [gcd(i,j)=1]\)都还不会,请去先入个门。
题目里面的各种套路还是很深的。
如果扎扎实实看完(并做完),一般的莫比乌斯反演肯定没问题了(当然不排除一些毒瘤题啦)。

Part1

这些题目都非常水,莫比乌斯反演入门题,

主要是对莫比乌斯反演应用有一个基本概念。

1.[HAOI2011]Problem b

()

题目:一组数据(\(a、d、c、d \leq 5×10^4\))求
\[\sum_{i=a}^{b} \sum_{j=c}^d [gcd(i,j)=d]\]
题解:
\[\sum_{i=1}^{n} \sum_{j=1}^m [gcd(i,j)=d] = \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{m}{d} \rfloor} [gcd(i,j)=1] = \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \mu(i)\lfloor \frac{\lfloor \frac{n}{d} \rfloor}{i} \rfloor * \lfloor \frac{\lfloor \frac{m}{d} \rfloor}{i} \rfloor\]
数论分块,然后二维容斥即可。

2.[NOI2010]能量采集

()

题目:一组数据(\(n、m \leq 10^5\)),求
\[2*\sum_{i=1}^n \sum_{j=1}^m gcd(i,j) - n*m\]
题解:
\[\sum_{i=1}^n \sum_{j=1}^m gcd(i,j) =\sum_{d=1}^nd \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{m}{d} \rfloor} [gcd(i,j)=1] \]
枚举\(d\),然后用第1题的方法搞即可。

3.Gcd

()

题目:一组数据,给定整数\(N(N\leq10^7)\),求\(1 \leq x,y \leq N\)\(Gcd(x,y)\)为素数的组数
题解:
\[\sum_{i=1}^n \sum_{j=1}^m gcd(i,j) =\sum_{d=2}^{d \leq n} d\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{m}{d} \rfloor} [gcd(i,j)=1] \]
枚举素数\(d\),然后用第1题的方法搞即可。

4.[中山市选2011]完全平方数

()

题目:\(50\)组数据,给出\(k\),求第\(k\)个不是完全平方数的倍数的数是多少。\(k \leq 10^9\)
题解:
先二分一个\(n\),然后检查\(n\)下面有多少个非完全平方数。计算方法为:
\(f(i)\)表示只为\(i^2\)倍数,并且不是其它平方数倍数的数的个数。
那么令\(F(i) = f(i)+f(2i)+....+f(ki)\),即为\((ri)^2\)倍数的数的个数。
那么\(F(i) = \sum_{i|d} f(d)\)。显然\(F(n) = \lfloor \frac{n}{i^2} \rfloor\)
反演一下:
\[f(1) = \sum_{i=1}^{\lceil \sqrt{n} \rceil } \lfloor \frac{n}{i^2} \rfloor\]
直接数论分块即可得到一个数\(n\)的排名\(f(1)\)

Part2

这一部分的题就相当有难度了(跨度这么大我也很无奈啊

从这些题中,我们可以感受到莫比乌斯反演的一些套路,包括提取公因数、分离变量等。

5.[BZOJ2154]Crash的数字表格

()

题目:一组数据,输入\(n\)\(m\),(\(n、m \leq 10^7\)),求:
\[\sum_{i=1}^n \sum_{j=1}^m lcm(i,j) \quad mod \quad 20101009\]
题解:
\[Ans = \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=1}^n \frac{f(n,m,d)}{d}\]
其中
\[f(n,m,d) = \sum_{i=1}^n \sum_{j=1}^m [gcd(i,j)=d]*ij = \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{i=1}^{\lfloor \frac{m}{d} \rfloor} ij*[gcd(i,j)=1]*d^2\]
带回原式中:
\[Ans = \sum_{d=1}^n d*f({\lfloor \frac{n}{d} \rfloor},{\lfloor \frac{m}{d} \rfloor},1) \]
考虑一下函数 \(f\) 的求法:
\[f({n},{m},d) = \sum_{i=1}^{n } \sum_{i=1}^{m } ij*[gcd(i,j)=d] = f(d)\]
\[F(d) = \sum_{i=1}^{
{n}} \sum_{i=1}^{
{m}} ij*[d|gcd(i,j)] = \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{i=1}^{\lfloor \frac{m}{d} \rfloor} ij= \sum_{n|d} f(d)\]
反演一下:
\[f(i) = \sum_{i|d}\mu(\frac{d}{i})F(d) , f(1) = \sum_{d=1}^n\mu(d)F(d) = \sum_{d=1}^n\mu(d) \sum_{i=1}^{
{\lfloor \frac{n}{d} \rfloor}} \sum_{j=1}^{\lfloor \frac{m}{d} \rfloor} ij\]
显然\(\sum_{i=1}^{
{n}} \sum_{j=1}^{
{m}} ij = \sum_{i=1}^{
{n}} i *\sum_{j=1}^{
{m}} j = \frac{n*(n+1)}{2} * \frac{m*(m+1)}{2}\)
总结一下,得到了两个式子:
\[Ans = \sum_{d=1}^n d*f({\lfloor \frac{n}{d} \rfloor},{\lfloor \frac{m}{d} \rfloor},1) \]
\[f({n},{m},1) = \sum_{d=1}^n\mu(d) \frac{\lfloor \frac{n}{d} \rfloor*(\lfloor \frac{n}{d} \rfloor+1)}{2} * \frac{\lfloor \frac{m}{d} \rfloor*(\lfloor \frac{m}{d} \rfloor+1)}{2}\]
两个式子都可以数论分块,所以复杂度为:\(O(\sqrt{n})*O(\sqrt{n})=O({n})\)

6.[SDOI2015]约数个数和

()

题目:\(5×10^4\)组数据,输入\(n,m\)\((n,m \leq 5×10^4)\),\(d(x)\)表示\(x\)的约数个数,求:
\[\sum_{i=1}^n \sum_{j=1}^m d(ij)\]
题解:
首先,有定理:
\[d(ij) = \sum_{t1|i} \sum_{t2|j} [gcd(t1,t2)=1]\]
证明:
对于一个约数\(d\),它必定由\(i\)的一个约数与\(j\)的一个约数的乘积。
为了防止算重,我们规定\(gcd(t1,t2)=1\)才计算。
因为每一个数一定可以被表示为两个互质的数的乘积,所以这样计算是正确的。
同样这样的\(t1\)\(t2\)一定存在于\(i\)\(j\)的约数中,因为唯一分解定理
所以把原式化为:
\[Ans =\sum_{i=1}^n \sum_{j=1}^m \sum_{t1|i} \sum_{t2|j} [gcd(t1,t2)=1]\]
四个\(\sum\)很不好看(也不好搞),单独考虑二元组(i,j)的贡献:
\[Ans = \sum_{u=1}^n \sum_{v=1}^m [gcd(u,v)=1] \lfloor \frac{n}{u} \rfloor \lfloor \frac{m}{v} \rfloor\]
\[f(d) = \sum_{u=1}^n \sum_{v=1}^m [gcd(u,v)=d] \lfloor \frac{n}{u} \rfloor \lfloor \frac{m}{v} \rfloor\]
同理令
\[F(d) = \sum_{u=1}^n \sum_{v=1}^m [d|gcd(u,v)] \lfloor \frac{n}{u} \rfloor \lfloor \frac{m}{v} \rfloor = \sum_{u=1}^{\lfloor \frac{n}{d} \rfloor}\sum_{u=1}^{\lfloor \frac{m}{d} \rfloor} \lfloor \frac{n}{ud} \rfloor \lfloor \frac{m}{vd} \rfloor\]
所以
\[F(d) = \sum_{u=1}^{\lfloor \frac{n}{d} \rfloor}\sum_{u=1}^{\lfloor \frac{m}{d} \rfloor} \lfloor \frac{n}{ud} \rfloor \lfloor \frac{m}{vd} \rfloor = \sum_{u=1}^{\lfloor \frac{n}{d} \rfloor} \lfloor \frac{n}{ud} \rfloor *\sum_{u=1}^{\lfloor \frac{m}{d} \rfloor} \lfloor \frac{m}{vd} \rfloor = sum(\lfloor \frac{n}{d} \rfloor)*sum(\lfloor \frac{m}{d} \rfloor)\]
其中\(sum(x)=\sum_{i=1}^{x} \lfloor \frac{x}{i} \rfloor\)表示\(1\)\(x\)的约数个数和,不懂为什么见
又因为
\[F(i) = \sum_{i|d}f(d)\]
莫比乌斯反演一波:
\[f(1) = \sum_{i=1}^n \mu(i)F(i) = \sum_{i=1}^n \mu(i) sum(\lfloor \frac{n}{i} \rfloor)*sum(\lfloor \frac{m}{i} \rfloor) = Ans\]
其中\[sum(x)=\sum_{i=1}^{x} \lfloor \frac{x}{i} \rfloor\]
显然先 数论分块 预处理\(sum(x)\),然后每次询问也数论分块求解\(f(1)\)即可。
总的复杂度为:预处理\(O(n \sqrt{n})\) , 询问 \(O(T \sqrt{n})\)

7. [SDOI2017]数字表格

()

题目:
\(f(i)\)为斐波那契数列第\(i\)项,定义\(f(0)=0,f(1)=1\)
总共输入\(10^3\)组数据,每次输入\(n,m\)\((n,m \leq 10^6)\),时限\(5 sec\),求:
\[\prod_{i=1}^n \prod_{j=1}^m f(gcd(i,j))\]
题解:
肯定先要提出\(gcd(i,j)\)
\[Ans = \prod_{i=1}^n \prod_{j=1}^m f(gcd(i,j)) = \prod_{d=1}^n f(d)^{\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{m}{d} \rfloor} [gcd(i,j)=1]}\]
上面那一坨提出来看(直接跳步骤了)
\[\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{m}{d} \rfloor} [gcd(i,j)=1] = \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \mu(i) {\lfloor \frac{n}{id} \rfloor} {\lfloor \frac{m}{id} \rfloor} = r(\lfloor \frac{n}{d} \rfloor,\lfloor \frac{m}{d} \rfloor)\]
\[Ans = \prod_{d=1}^n f(d)^{r(\lfloor \frac{n}{d} \rfloor,\lfloor \frac{m}{d} \rfloor)}\]
显然\(Ans\)\(r(n,m)\)的求解都可以数论分块,此时复杂度为\(O(n)\)可以跑过单组数据。
但是我们有多组数据,考虑如何优化。
看到\(id\),是不是感觉很套路?令\(T = id\) , 那么我们把\(T\)给提出来:
\[\prod_{d=1}^n f(d)^{\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \mu(i) {\lfloor \frac{n}{T} \rfloor} {\lfloor \frac{m}{T} \rfloor}} = \prod_{T=1}^n(\prod_{d|T} f(d)^{\mu(\frac{T}{d})})^{
{\lfloor \frac{n}{T} \rfloor} {\lfloor \frac{m}{T} \rfloor}}\]
\[R(T) = \prod_{d|T} f(d)^{\mu(\frac{T}{d})}\]
这显然是可以\(O(n log^2(n))\)直接暴力算出来的(因为是枚举因数啊)。
那么
\[Ans = \prod_{T=1}^n(\prod_{d|T} f(d)^{\mu(\frac{T}{d})})^{
{\lfloor \frac{n}{T} \rfloor} {\lfloor \frac{m}{T} \rfloor}} = \prod_{T=1}^nR(T)^{
{\lfloor \frac{n}{T} \rfloor} {\lfloor \frac{m}{T} \rfloor}}\]
显然\(R(T)\)是可以记乘法前缀和的,所以每次询问时数论分块搞一波即可。
总的复杂度: 预处理\(O(n log^2(n))\) , 询问\(O(T \sqrt{n}log(n))\)

Part3

其实比较关键的题目就是\(Part2\)里的三题了,剩下的这些题当做补充练习。

8. GCD-2(YY的GCD)

()

题目:\(10^5\)组数据,给定整数\(N,M(\leq10^7)\),求\(1 \leq x\leq N\) , \(1 \leq y\leq M\) ,且\(Gcd(x,y)\)为素数的组数。
题解:
其实就是第三题《\(GCD\)》的升级版。
前面的步骤直接跳过:
\[Ans = \sum_{d=1}^n \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \mu(i) \lfloor \frac{n}{id} \rfloor \lfloor \frac{m}{id} \rfloor\]
老套路,令\(T = id\),提出\(T\)
\[\sum_{d=1}^n \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \mu(i) \lfloor \frac{n}{id} \rfloor \lfloor \frac{m}{id} \rfloor = \sum_{T=1}^n \sum_{d|T} \mu(\frac{T}{d}) \lfloor \frac{n}{T} \rfloor \lfloor \frac{m}{T} \rfloor = \sum_{T=1}^n\lfloor \frac{n}{T} \rfloor \lfloor \frac{m}{T} \rfloor \sum_{d|T} \mu(\frac{T}{d})\]
然后只要考虑这个玩意怎么搞即可:
\[R(T) = \sum_{d|T} \mu(\frac{T}{d})\]
额...还记得在讲素数时说的那个结论吗?
结论回顾: 质数的密度大约是\(\frac{1}{10}\)!
所以\(O(10^7k) ------> O(10^6k)?\)
嗯,好像是这样,所以暴力埃式筛即可。

9. [UVa11426]最大公约数之和——极限版II

()

题目:\(10^2\)组数据,给定整数\(n,m(\leq10^7)\),求:
\[\sum_{i=1}^{n-1} \sum_{j=i+1}^n gcd(i,j)\]
题解:
其实就是第二题《能量采集》的升级版。
考虑二元组\((i,j)\)的构成形式,一共三种:\(i<j\)\(i=j\)\(i>j\)
所以只要求\(\sum_{i=1}^n \sum_{j=1}^n gcd(i,j) = Ans'\),那么显然:
\[Ans = \frac{(Ans' - \sum_{i=1}^n i)}{2}\]
下面求\(Ans'\),前面的步骤直接跳过:
\[Ans' = \sum_{d=1}^n d\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \mu(i) {\lfloor \frac{n}{id} \rfloor }^2\]
还是老套路(套路就是这么神奇),令\(T = id\),提出\(T\)
\[Ans' = \sum_{T=1}^n \sum_{d|T} \mu(\frac{T}{d}) {\lfloor \frac{n}{T} \rfloor }^2 d = \sum_{T=1}^n {\lfloor \frac{n}{T} \rfloor }^2\sum_{d|T} \mu(\frac{T}{d}) d \]
那么显然下面这个东东:
\[R(x) = \sum_{d|T} \mu(\frac{T}{d})*d\]
是一个狄利克雷卷积 , 直接积性函数线性筛即可。

10.HDU4746: \(Mophues\)

()

名字莫名诡异....
题目:\(5*10^3\)组数据 , 每次给定一个\(n,m,p\)(\(<=5*10^5\)),求:
\[\sum_{i=1}^n \sum_{j=1}^m [h(gcd(i,j)) \leq p]\]
其中其中\(h(x)\)表示一个数质因数分解后质数的个数。例如:\(12=2×2*3\),那么\(h(12)=3\)
题解:
非常有意思的一题。
首先大力化式子(与前面所有题目方法类似):
\[Ans = \sum_{T=1}^n \lfloor \frac{n}{T} \rfloor \lfloor \frac{m}{T} \rfloor \sum_{d|T} [h(d) \leq p] \mu(\frac{T}{d}) = \sum_{T=1}^n \lfloor \frac{n}{T} \rfloor \lfloor \frac{m}{T} \rfloor R(p,T)\]
考虑如何求\(R(p,T)\)
\[R(p,T) = \sum_{d|T} [h(d) \leq p] \mu(\frac{T}{d})\]
发现在\([1,n]\)中,\(h(i) \leq 18\) , (\(2^{18} = 262144\) , \(2^{19} = 524288\)
所以就非常神奇了 , 当\(18 < p\)时,直接输出\(n*m\)即可。
所以只要处理\(0 \leq p \leq 18\)的前缀和即可。
这个还是比较简单的吧,分\(3.5\)步走:
(0)显然\(h(i)\)在求\(\mu(i)\)时可以顺便求出来。
(1)埃氏筛处理\(E(p,x) = \sum_{d|T} [h(d) = p] \mu(\frac{T}{d})\)
(2)统计一下\(S(p,x) = \sum_{i=1}^p E(i,x)\)
(3)统计一下\(R(p,x) = \sum_{i=1}^x S(p,i)\)
然后每次询问时直接调用\(R(p,x)\),接着数论分块即可。

11.[ZOJ3435]Ideal Puzzle Bobble

()

题目:求:
\[\sum_{i=1}^L \sum_{j=1}^W \sum_{k=1}^H[gcd(i,j,k)==1]\]
题解:
这题应该放到\(Part1\)里去的...
\[Ans = \sum_{i=1}^{min(L,W,H)} \mu(i) \lfloor \frac{L}{i} \rfloor \lfloor \frac{W}{i} \rfloor \lfloor \frac{H}{i} \rfloor\]

12.来历不明的火题:

题目:一组数据,给定\(n,k\)(\(n \leq 10^7\) , \(k \leq 10^5\)) , 求:

\[\sum_{i=1}^n \sum_{j=1}^m i^kj^k*gcd(i,j)\]
题解:
首先先打一个预防针:\(q(i)=i^k\)请线性筛好不然肯定会超时。
然后先化式子:
\[Ans = \sum_{d=1}^n d^{2k+1} \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{n}{d} \rfloor}[gcd(i,j)=1]i^kj^k = \sum_{d=1}^n d^{2k+1} R(\lfloor \frac{n}{d} \rfloor)\]
然后求解\(R(x)\)
\[f(d) = \sum_{j=1}^{\lfloor \frac{n}{d} \rfloor}[gcd(i,j)=d]i^kj^k \]
所以构造倍数形式莫比乌斯:
\[F(d) = \sum_{j=1}^{n}[d|gcd(i,j)]i^kj^k = \sum_{d=1}^{n}d^{2k}\sum_{i=1}^{\lfloor \frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor \frac{n}{d}\rfloor}i^kj^k\]
上面这步是关键(提出\(d\)),然后继续化:
\[F(d) = \sum_{d=1}^{n}d^{2k}\sum_{i=1}^{\lfloor \frac{n}{d}\rfloor}i^k *\sum_{j=1}^{\lfloor \frac{n}{d}\rfloor}j^k = \sum_{d=1}^n d^{2k} *[sum(\frac{n}{d})]^2 \ ;\]
其中\(sum(d)\)为乘法前缀和,预处理一下即可。
接着就可以莫比乌斯反演了:
\[R(n) = f(1) = \sum_{d=1}^n \mu(d) F(d) = \sum_{d=1}^n \mu(d) d^{2k} sum(\lfloor \frac{n}{d} \rfloor) \ ;\]
\[Ans = \sum_{d=1}^n d^{2k+1} R(\lfloor \frac{n}{d} \rfloor)\]
注意一下$x^{2k}=(x^k)^2  ;  x^{2k+1} = x^{2k}*x $ , 不能用快速幂。
显然两边都可以数论分块,\(O(n)\)计算即可 , 注意常数问题。

Part INF

这里总结一下套路:

(1)遇见\(id\)形式,换元提出\(T=id\)
\[Sample=\sum_{d=1}^n \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}\mu({i}) \lfloor \frac{n}{id} \rfloor = \sum_{T=1}^n \lfloor \frac{n}{T} \rfloor \sum_{d|T}\mu(\frac{T}{d}) \]
那么后面那一坨就很有可能可以线性筛、分块(或者搞事情)之类的。
(2)构造\(F(d)\)时提出公因子\(d\)
\[Sample = F(d) = \sum_{j=1}^{n}[d|gcd(i,j)]ij = \sum_{d=1}^{n}d\sum_{i=1}^{\lfloor \frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor \frac{n}{d}\rfloor}ij= \sum_{d=1}^{n}d(\sum_{i=1}^{\lfloor \frac{n}{d}\rfloor}i)^2\]
然后后面的一坨一般就比较好算了,从而达到化简式子的目的。

转载于:https://www.cnblogs.com/GuessYCB/p/8277359.html

你可能感兴趣的文章
koa2开发微信公众号: 不定期推送最新币圈消息
查看>>
小tips:JS中this操作执行像(object.getName = object.getName)()操作改变了this
查看>>
为什么国外的 App 很少会有开屏广告?
查看>>
移动端中webview的h5访问,出现了运营商的广告解决方案
查看>>
PHP curl 返回Connection timed out解决办法
查看>>
React 服务端渲染如此轻松 从零开始构建前后端应用
查看>>
40 行代码内实现一个 React.js
查看>>
关于5G被激烈讨论的那些争端和冲突
查看>>
AlphaZero进化论:从零开始,制霸所有棋类游戏
查看>>
.NET仓储模式高级用例
查看>>
如何理解 Laravel 的 Ioc 容器
查看>>
ORACLE学习笔记--性能优化4
查看>>
毕啸南专栏 | 对话李开复:AI科学家的转型之路
查看>>
iphone: 可编辑的tableView Move&Delete
查看>>
爱上MVC3系列~使用视图模型的好处及与数据模型之间的赋值问题
查看>>
jQuery中的join方法
查看>>
JSP取得绝对路径
查看>>
Python Module_os_操作系统
查看>>
最新Do Not Track标准问世:网站都应尊重用户选择
查看>>
逾半数全球商业领袖认同智能自动化,但首先要解决员工的抵触情绪
查看>>