HAOI2011 Problem b
题意
给出 \(a,b,c,d,k\) ,求 \(\sum_{i=a}^b\sum_{j=c}^d[gcd(i,j)==k]\) 。
传送
Luogu
BZOJ
分析
假设 \(b\le d\)
将 \(k\) 提出来
\[\sum_{i=a}^{\lfloor\frac{b}{k}\rfloor}\sum_{j=c}^{\lfloor\frac{d}{k}\rfloor}[gcd(i,j)==1]\]
将 \(gcd(i,j)==1\) 替换为 \(\epsilon(gcd(i,j))\)
\[\sum_{i=a}^{\lfloor\frac{b}{k}\rfloor}\sum_{j=c}^{\lfloor\frac{d}{k}\rfloor}\epsilon(gcd(i,j))\]
再将 \(\epsilon\) 函数用 \(\mu\) 表示
\[\sum_{i=a}^{\lfloor\frac{b}{k}\rfloor}\sum_{j=c}^{\lfloor\frac{d}{k}\rfloor}\sum_{d|gcd(i,j)}\mu(d)\]
交换求和顺序,改为枚举 \(d\)
\[\sum_{d=1}^{\lfloor\frac{b}{k}\rfloor}\mu(d)\sum_{i=1}^{\lfloor\frac{b}{k}\rfloor}d|i\sum_{j=1}^{\lfloor\frac{d}{k}\rfloor}d|j\]
\(\sum_{i=1}^{\lfloor\frac{b}{k}\rfloor}d|i\) 即 \({\lfloor\frac{b}{k}\rfloor}\) 以内 \(i\) 的约数个数和,等于 \(\lfloor\frac{b}{kd}\rfloor\) ,同理, \(\sum_{j=1}^{\lfloor\frac{d}{k}\rfloor}d|j\) 等同于 \(\lfloor\frac{d}{kd}\rfloor\) 。
则式子为
\[\sum_{d=1}^{\lfloor\frac{b}{k}\rfloor}\mu(d)\lfloor\frac{b}{kd}\rfloor\lfloor\frac{d}{kd}\rfloor\]
于是我们便可以用整除分块求解了。
代码
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 500005
#define il inline
#define re register
#define tie0 cin.tie(0),cout.tie(0)
#define fastio ios::sync_with_stdio(false)
#define File(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout)
using namespace std;
typedef long long ll;template <typename T> inline void read(T &x) {T f = 1; x = 0; char c;for (c = getchar(); !isdigit(c); c = getchar()) if (c == '-') f = -1;for ( ; isdigit(c); c = getchar()) x = x * 10 + (c ^ 48);x *= f;
}int a, b, c, d, k;
int mu[N], prime[N];
bool vis[N];void sieve() {int cnt = 0;mu[1] = 1;for (int i = 2; i <= N; ++i) {if (!vis[i]) prime[++cnt] = i, mu[i] = -1;for (int j = 1; j <= cnt && i * prime[j] <= N; ++j) {vis[i*prime[j]] = 1;if (i % prime[j] == 0) {mu[i*prime[j]] = 0;break;}mu[i*prime[j]] = -mu[i];}}for (int i = 1; i <= N; ++i) mu[i] += mu[i-1];
}int f(int n, int m) {int sum = 0;for (int i = 1, j; i <= min(n, m); i = j + 1) {j = min(n / (n / i), m / (m / i));sum += (mu[j] - mu[i-1]) * (n / i) * (m / i);}return sum;
}int main() {int n;read(n);sieve();while (n--) {read(a), read(b), read(c), read(d), read(k);printf("%d\n", f(b / k, d / k) - f(b / k, (c - 1) / k) - f((a - 1) / k, d / k) + f((a - 1) / k, (c - 1) / k));}return 0;
}
转载于:https://www.cnblogs.com/hlw1/p/11537360.html
HAOI2011 Problem b相关推荐
- [POI2007]ZAP-Queries [HAOI2011]Problem b 莫比乌斯反演
1,[POI2007]ZAP-Queries ---题面--- 题解: 首先列出式子:$$ans = \sum_{i = 1}^{n}\sum_{j = 1}^{m}[gcd(i, j) == d]$ ...
- BZOJ2301: [HAOI2011]Problem b
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MB Submit: 6435 Solved: 2986 [Submi ...
- [HAOI2011]Problem c
链接 P2523 [HAOI2011]Problem c 想法还是很巧妙的. 其实只是问一个先后顺序,因为编号相同的话,那么\(id\)小的就在前面,\(id\)大的就在后面. 所以我们考虑的是到底有 ...
- BZOJ 2301 [HAOI2011]Problem b
2301: [HAOI2011]Problem b Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函 ...
- BZOJ 2301: [HAOI2011]Problem b
二次联通门 : BZOJ 2301: [HAOI2011]Problem b /*BZOJ 2301: [HAOI2011]Problem b莫比乌斯反演 + 容斥将k除下来后就变为了一道原题后像求二 ...
- 【BZOJ 2298】 2298: [HAOI2011]problem a (DP)
2298: [HAOI2011]problem a Time Limit: 10 Sec Memory Limit: 256 MB Submit: 1326 Solved: 637 Descrip ...
- [LG P2519][BZOJ2298][HAOI2011]problem a
[LG P2519][BZOJ2298][HAOI2011]problem a 题目描述 一次考试共有n个人参加 第i个人说:"有ai个人分数比我高,bi个人分数比我低." 问最少 ...
- P2522 [HAOI2011]Problem b
P2522 [HAOI2011]Problem b 题意: 对于给出的 n 个询问,每次求有多少个数对 (x,y),满足 a≤x≤b,c≤y≤d,且 gcd(x,y)=k,gcd(x,y) 函数为 x ...
- BZOJ2301: [HAOI2011]Problem b[莫比乌斯反演 容斥原理]【学习笔记】
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MB Submit: 4032 Solved: 1817 [Submi ...
- bzoj 2302: [HAOI2011]Problem c(DP)
2302: [HAOI2011]Problem c Time Limit: 30 Sec Memory Limit: 256 MB Submit: 937 Solved: 509 [Submit] ...
最新文章
- JS笔记(一):声明提升
- linux内存使用统计,Linux 中free命令检查内存使用情况
- c++入门代码_Golang Gin 实战(一)| 快速安装入门
- 通用数据级别权限的框架设计与实现(3)-数据列表的权限过滤
- python绘制3d图-python3利用Axes3D库画3D模型图
- linux运维入门第一周的学习部分命令!
- AD中批量增加带密码用户
- 稳定性与高可用保障的工作思路
- ssh源码编译安装mysql_总结源码编译安装mysql
- 使用 ale.js 制作一个小而美的表格编辑器(1)
- BZOJ4303 : 数列
- FOSCommentBundle功能包:添加Symfony2内建的ACL安全
- 2021-07-18
- 51单片机学习笔记——串口通信
- 天道酬勤~我如此惬意
- ASP.NET MVC里ModelState.IsValid总是true或者总是false
- 安卓(java)计算器简单实现
- java怎么实现发布说说_仿QQ发表说说
- 短信验证码登录,以及第三方登录
- Python可视化数据画直线的几种方法