题解【bzoj2301 [HAOI2011]Problem b】
Description
求有多少个数对 \((x,y)\) ,满足$ a \leq x \leq b$ ,\(c \leq y \leq d\) ,且 \(\gcd(x,y) = k\),\(\gcd(x,y)\)函数为 \(x\) 和 \(y\) 的最大公约数。多组询问。\(a,b,c,d,k,T \leq 50000\)
Solution
莫比乌斯反演的经典题目QAQ
首相将问题转化成前缀上的问题。即需要求出 有多少个数对 \((x,y)\) ,满足$ 1 \leq x \leq a$ ,\(1 \leq y \leq b\) ,且 \(\gcd(x,y) = k\)。如果能够快速算出来这个,容斥一下就可以求出最后答案。
考虑这个怎么求,开始推式子。这个东西显然就是
\]
把 \(k\) 提出来可得
\]
然后把后面这个 \([\gcd(i,j)=1]\) 反演掉,得
\]
把 \(d\) 搞到前面来,得到
\]
好了,这个玩意可以预处理出 \(\mu\) 得前缀和然后分块完事。
Code
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 50000;
int k, cnt, p[N + 50], mu[N + 50], flag[N + 50], sum[N + 50];
inline void prework() {
flag[1] = mu[1] = 1;
for(int i = 2; i <= N; i++) {
if(!flag[i]) {
p[++cnt] = i; mu[i] = -1;
} for(int j = 1; j <= cnt && i * p[j] <= N; j++) {
flag[i * p[j]] = 1;
if(i % p[j] == 0) {
mu[i * p[j]] = 0; break;
} mu[i * p[j]] = mu[i] * -1;
}
} for(int i = 1; i <= N; i++) sum[i] = sum[i - 1] + mu[i];
}
inline ll calc(int n, int m) {
if(n > m) swap(n, m); ll ret = 0;
for(int l = 1, r; l <= n / k; l = r + 1) {
r = min(n / (n / l), m / (m / l));
ret += 1ll * (n / (l * k)) * (m / (l * k)) * (sum[r] - sum[l - 1]);
} return ret;
}
int main() {
int T; prework();
scanf("%d", &T);
while(T--) {
int a, b, c, d;
scanf("%d %d %d %d %d", &a, &b, &c, &d, &k);
printf("%lld\n", calc(a - 1, c - 1) - calc(b, c - 1) - calc(d, a - 1) + calc(b, d));
}
return 0;
}
题解【bzoj2301 [HAOI2011]Problem b】的更多相关文章
- BZOJ2301: [HAOI2011]Problem b[莫比乌斯反演 容斥原理]【学习笔记】
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MBSubmit: 4032 Solved: 1817[Submit] ...
- BZOJ2301 [HAOI2011]Problem b
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- Bzoj-2301 [HAOI2011]Problem b 容斥原理,Mobius反演,分块
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2301 题意:多次询问,求有多少对数满足 gcd(x,y)=k, a<=x<=b ...
- 【数论】【莫比乌斯反演】【线性筛】bzoj2301 [HAOI2011]Problem b
对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. 100%的数据满足:1≤n≤50000,1≤a≤b ...
- [bzoj2301][HAOI2011]Problem B —— 莫比乌斯反演+容斥原理
题意 给定a, b, c, d, k,求出: \[\sum_{i=a}^b\sum_{j=c}^d[gcd(i, j) = k]\] 题解 为方便表述,我们设 \[calc(\alpha, \beta ...
- bzoj2301 [HAOI2011]Problem b【莫比乌斯反演 分块】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2301 很好的一道题.首先把每个询问转化为4个子询问,最后的结果就是这四个子询问的记过加加减减 ...
- BZOJ2301: [HAOI2011]Problem b 莫比乌斯反演
分析:对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. 然后对于求这样单个的gcd(x,y)=k的, ...
- [bzoj2301: [HAOI2011]Problem b] 乞讨
</pre><pre code_snippet_id="507886" snippet_file_name="blog_20141104_2_53831 ...
- bzoj2301: [HAOI2011]Problem b懵逼乌斯反演
属于结果的和好求但是结果不好求的题 (轻易能得到以k的倍数为最大公约数的对数,但是不好直接求k) 所以一波反演结束 其实反演的时候完全没有反演的感觉,就是不停地恒等变形 算是懵逼乌斯反演最简单的例题 ...
随机推荐
- CentOS7.2 部署Haproxy 1.7.2
原文发表于cu:2017-03-16 参考文档: haproxy:http://www.haproxy.org/ 本文涉及haproxy的安装,并做简单配置. 一.环境准备 1. 操作系统 CentO ...
- Composer指南
安装 windows中安装Composer 一般来说,windows下安装composer有两种办法,一种是直接下载并运行Composer-Setup.exe,这种方法在中国似乎很难完成安装.另一种就 ...
- 如何停止AAD服务
Connect-MsolService (Get-MSOLCompanyInformation).DirectorySynchronizationEnabled 用这个命令查看是enable还是Dis ...
- react-native debug js remotely跨域问题
react-native debug js remotely跨域问题 我们在安卓真机上调试react-native时,启用debug js remotely的时候,会出现跨域问题.这个时候我们只需要一 ...
- 如何理解IPD+CMMI+Scrum一体化研发管理解决方案之CMMI篇
如何快速响应市场的变化,如何推出更有竞争力的产品,如何在竞争中脱颖而出,是国内研发企业普遍面临的核心问题,为了解决这些问题,越来越多的企业开始重视创新与研发管理,加强研发过程的规范化,集成产品开发(I ...
- 第九周个人PSP
11.10--11.16本周例行报告 1.PSP(personal software process )个人软件过程. C(类别) C(内容) ST(开始时间) ET(结束时间) INT(间隔时间) ...
- CentOS7安装Consul集群
1.准备4台服务器 linux1 192.168.56.101 linux2 192.168.56.102 linux3 192.168.56.103 linux4 192.168.56.104 2. ...
- [2017BUAA软工]第一次博客作业
一.一些疑问 看书看得比较慢,暂时只思考了以下几个问题,有些自问自答,不知道符合不符合要求…… [1] 第一章中书上提到了这样一个例子: “如果一架民用飞机上有需求,用户使用它的概率是百万分之一,你还 ...
- 可以从Jar外部加载JDBC.properties的Spring-mybatis配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 关于command 'gcc' failed with exit status 1 解决方法
Python踩坑之路 Setup script exited with error: command 'gcc' failed with exit status 1 由于没有正确安装Python开发环 ...