【Mobius绮丽的辗转】莫比乌斯反演
Problem
对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数。
1≤n≤50000,1≤a≤b≤50000,1≤c≤d≤50000,1≤k≤50000
Sub problem
设Ans(i,j)表示有多少个数对(x,y),满足x≤i,c≤y≤j,且gcd(x,y) = k。
我们可以先求出Ans(b,d),Ans(b,c−1),Ans(a−1,d),Ans(a−1,c−1),
然后ans=Ans(b,d)−Ans(b,c−1)−Ans(a−1,d)+Ans(a−1,c−1)。
那么问题就变成了如何求Ans(n,m)。
Discuss
讨论一下Ans(n,m)如何求,其中n<m。
先设f(k),表示有多少个数对(x,y),满足x≤n,c≤y≤m,且gcd(x,y) = k。
显然Ans(n,m)=f(k)。
再设g(k),表示多少个数对(x,y),满足x≤n,c≤y≤m,且k|gcd(x,y)
因为k|gcd(x,y),所以设x=k∗x′,y=k∗y′;
由于x′只能取1...⌊nk⌋,y′只能取1...⌊mk⌋
所以
同时,我们会有
此时,我们将g(k)用f(k)表示,并且g(k)是容易求出结果的。
Mobius
正片开始
我们非常功利地得出结论:
正当我们遇到这种式子时,
或
当g[d]是积性函数,我们可以将上式转化为,
其中
Discuss:μ的性质
(1)μ是积性函数
可以证明,μ函数也是积性函数,所以μ可以通过线性筛法预处理,如下代码。
miu[1]=1;
for (i=2;i<maxn;i++){
if (!bz[i]){
p[++p[0]]=i;
miu[i]=-1;
}
for (j=1;j<=p[0];j++){
k=i*p[j];
if (k>=maxn) break;
bz[k]=true;
if (i%p[j]==0){
miu[k]=0;
break;
}else miu[k]=-miu[i];
}
}
(2)μ的“和性质”
Back to the Problem
题目的式子是
跟(2)有异曲同工之妙,
所以
然而,这并没有什么卵用,我们仍然过不了。
还能优化??
Deeplier discuss
我们发现,
其实⌊nik⌋∗⌊mik⌋很多时候是相同的取值。
所以我们可以将相同值的⌊nik⌋∗⌊mik⌋合并一起来计算,来优化时间复杂度。
显然⌊nik⌋的取值最多有2∗n√种,
所以可以把时间复杂度优化到O(2∗n√+2∗m−−√)一次询问。
Ending
至此,我们已解决了这道题。
原题Code。
Proving
μ的“和性质”
求证:
证明:
n=1时显然;
讨论n>1的情况,
因为μ的定义,
所以∑d|nμ(d)中,只有当d的任意质因子的指数不能超过1时,μ(d)才会对和产生贡献。
我们设n的质因子个数为q个。
那么,
我们观察一下杨辉三角:
显然的是,当q是偶数时,由杨辉三角的对称性,
现在考虑q(q>1)是奇数的情况,
由q−1是偶数,综上,
得证。
证明反演
求证:
证明:
这里经历一个重要的过程:转换主体,
感性地想,所有的μ(id)都与f(d′)相乘过,其中d′|d;
反过来,那么所有的f(d′)都与μ(id)相乘过,其中d′|d。
所以,
令x=id,则d=ix,那么
由μ的“和性质”,
当d′!=i时,则id′>1,所以∑x|id′μ(x)=0;
当d′=i时,则id′=1,所以∑x|id′μ(x)=1。
所以
综上,
得证。
另一个变式(3)类似。
True Ending
至此,Mobius反演已证明完毕。
【Mobius绮丽的辗转】莫比乌斯反演的更多相关文章
- 【莫比乌斯反演】关于Mobius反演与gcd的一些关系与问题简化(bzoj 2301 Problem b&&bzoj 2820 YY的GCD&&BZOJ 3529 数表)
首先我们来看一道题 BZOJ 2301 Problem b Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd( ...
- (暂时弃坑)(半成品)ACM数论之旅18---反演定理 第二回 Mobius反演(莫比乌斯反演)((づ ̄3 ̄)づ天才第一步,雀。。。。)
莫比乌斯反演也是反演定理的一种 既然我们已经学了二项式反演定理 那莫比乌斯反演定理与二项式反演定理一样,不求甚解,只求会用 莫比乌斯反演长下面这个样子(=・ω・=) d|n,表示n能够整除d,也就是d ...
- 欧拉函数线性求解以及莫比乌斯反演(Mobius)
前言 咕咕了好久终于来学习莫反了 要不是不让在机房谁会发现数学一本通上有这么神奇的东西 就是没有性质的证明 然后花了两节数学课证明了一遍 舒服- 前置知识:欧拉函数,二项式定理(组合数) 会欧拉函数的 ...
- UVa 11014 (莫比乌斯反演) Make a Crystal
这个题是根据某个二维平面的题改编过来的. 首先把问题转化一下, 就是你站在原点(0, 0, 0)能看到多少格点. 答案分为三个部分: 八个象限里的格点,即 gcd(x, y, z) = 1,且xyz均 ...
- HDU 1695 (莫比乌斯反演) GCD
题意: 从区间[1, b]和[1, d]中分别选一个x, y,使得gcd(x, y) = k, 求满足条件的xy的对数(不区分xy的顺序) 分析: 虽然之前写过一个莫比乌斯反演的总结,可遇到这道题还是 ...
- UVa 10214 (莫比乌斯反演 or 欧拉函数) Trees in a Wood.
题意: 这道题和POJ 3090很相似,求|x|≤a,|y|≤b 中站在原点可见的整点的个数K,所有的整点个数为N(除去原点),求K/N 分析: 坐标轴上有四个可见的点,因为每个象限可见的点数都是一样 ...
- hdu 1695 GCD 莫比乌斯反演入门
GCD 题意:输入5个数a,b,c,d,k;(a = c = 1, 0 < b,d,k <= 100000);问有多少对a <= p <= b, c <= q <= ...
- uva11426(莫比乌斯反演)
传送门:GCD Extreme (II) 题意:给定n(n<=4000000),求G G=0 for(int i=1;i<n;i++) for(int j=i+1;j<=n;j++) ...
- SPOJ PGCD(莫比乌斯反演)
传送门:Primes in GCD Table 题意:给定两个数和,其中,,求为质数的有多少对?其中和的范围是. 分析:这题不能枚举质数来进行莫比乌斯反演,得预处理出∑υ(n/p)(n%p==0). ...
随机推荐
- linux命令补全工具
一:下载bash-competion工具 https://files.cnblogs.com/files/zgngg/bash-completion.zip 二:解压 unzip bash-comp ...
- RQNOJ--160 竞赛真理(01背包)
题目http://www.rqnoj.cn/problem/160 分析:这是一个01背包问题,对于每一道题目,都有两个选择"做"或者"不做". 但是唯一不同的 ...
- vue @click传字符串
参考: https://www.cnblogs.com/springlight/p/5782637.html 关键:使用转译字符 \ 来转译引号 方法一. 直接传递: var tem = " ...
- 论文翻译——R-CNN(目标检测开山之作)
R-CNN论文翻译 <Rich feature hierarchies for accurate object detection and semantic segmentation> 用 ...
- ajaxStart 和 ajaxSend 不执行
我们一般会在loading 效果的时候会用上这两个全局事件 ajaxStart 和 ajaxSend 但是要注意的是 在同时有多个ajax 执行的时候ajaxStart 只会执行一次 所以一般情况下 ...
- lc6 ZigZag Conversion
lc6 ZigZag Conversion 分成两步, 第一步垂直向下, 1 1 1 1 第二步倾斜向上 1 1 1 1 1 1 1 用nRows个StringBuilder 然后将他们合并即可 cl ...
- 洛谷 P1155 双栈排序
题面 解题思路 这道题乍一看还以为是个模拟..怒写一发30分(noip提高组t4有模拟吗?). 其实很好hack,如 10 10 2 8 1 7 9 3 4 5 6 按模拟的思路,应该是10入第一个栈 ...
- Linux 7.X 解锁用户账号
Linux 7.X 解锁用户账号 使用指令:sudo passwd -u tomcat ,解锁. 但是会有如下提示信息: 因为 55 失败登录而锁定账户 此时,需执行指令:pam_tally2 -u ...
- org.apache.ant实现压缩和解压
<dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</artifactI ...
- LINUX查询用户命令
W 可显示开机多久,当前登录的所有用户,平均负载 Who 显示当前登录的所有用户 Last 显示每个用户最后的登录时间 Lastlog 显示每个用户最后的登录时间