题意

给出 \(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相关推荐

  1. [POI2007]ZAP-Queries [HAOI2011]Problem b 莫比乌斯反演

    1,[POI2007]ZAP-Queries ---题面--- 题解: 首先列出式子:$$ans = \sum_{i = 1}^{n}\sum_{j = 1}^{m}[gcd(i, j) == d]$ ...

  2. BZOJ2301: [HAOI2011]Problem b

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MB Submit: 6435  Solved: 2986 [Submi ...

  3. [HAOI2011]Problem c

    链接 P2523 [HAOI2011]Problem c 想法还是很巧妙的. 其实只是问一个先后顺序,因为编号相同的话,那么\(id\)小的就在前面,\(id\)大的就在后面. 所以我们考虑的是到底有 ...

  4. 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)函 ...

  5. BZOJ 2301: [HAOI2011]Problem b

    二次联通门 : BZOJ 2301: [HAOI2011]Problem b /*BZOJ 2301: [HAOI2011]Problem b莫比乌斯反演 + 容斥将k除下来后就变为了一道原题后像求二 ...

  6. 【BZOJ 2298】 2298: [HAOI2011]problem a (DP)

    2298: [HAOI2011]problem a Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 1326  Solved: 637 Descrip ...

  7. [LG P2519][BZOJ2298][HAOI2011]problem a

    [LG P2519][BZOJ2298][HAOI2011]problem a 题目描述 一次考试共有n个人参加 第i个人说:"有ai个人分数比我高,bi个人分数比我低." 问最少 ...

  8. 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 ...

  9. BZOJ2301: [HAOI2011]Problem b[莫比乌斯反演 容斥原理]【学习笔记】

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MB Submit: 4032  Solved: 1817 [Submi ...

  10. bzoj 2302: [HAOI2011]Problem c(DP)

    2302: [HAOI2011]Problem c Time Limit: 30 Sec  Memory Limit: 256 MB Submit: 937  Solved: 509 [Submit] ...

最新文章

  1. JS笔记(一):声明提升
  2. linux内存使用统计,Linux 中free命令检查内存使用情况
  3. c++入门代码_Golang Gin 实战(一)| 快速安装入门
  4. 通用数据级别权限的框架设计与实现(3)-数据列表的权限过滤
  5. python绘制3d图-python3利用Axes3D库画3D模型图
  6. linux运维入门第一周的学习部分命令!
  7. AD中批量增加带密码用户
  8. 稳定性与高可用保障的工作思路
  9. ssh源码编译安装mysql_总结源码编译安装mysql
  10. 使用 ale.js 制作一个小而美的表格编辑器(1)
  11. BZOJ4303 : 数列
  12. FOSCommentBundle功能包:添加Symfony2内建的ACL安全
  13. 2021-07-18
  14. 51单片机学习笔记——串口通信
  15. 天道酬勤~我如此惬意
  16. ASP.NET MVC里ModelState.IsValid总是true或者总是false
  17. 安卓(java)计算器简单实现
  18. java怎么实现发布说说_仿QQ发表说说
  19. 短信验证码登录,以及第三方登录
  20. Python可视化数据画直线的几种方法

热门文章

  1. Oracle根据日期区间查询Date类型的数据
  2. Python 标准库之 uuid
  3. pandas如何读取一个文件夹下的所有文件
  4. NLP.TM | GloVe模型及其Python实现
  5. CPU Cache原理与示例
  6. 处理器嵌入室内校正数字音频平台
  7. 如何挑选深度学习 GPU?
  8. ViewGroup的Touch事件分发(源码分析)
  9. Git基本命令和GitFlow工作流
  10. Python 赋值运算符