Atziluth's Last Contest. 001题解
被dalaoYHH爆虐
问题 H:mcd
题目描述
给出两个长为 \(n\) 的数列 \({a_n},{b_n}\),保证 \(a_i\le b_i(i=1,2,\cdots,n)\)。
现在您需要对于所有的 $k \in [1,m] \cup \mathbb{Z} $,求出满足以下条件的数列 \(c\) 的数量:
- 长为 \(n\);
- \(a_i\le c_i\le b_i (i=1,2,\cdots,n)\);
- \(\gcd\limits_{i=1}^n{c_i}=k\),其中 \(\gcd\) 是最大公约数的英文简写。
对 \(998244353\) 取模。
输入格式
第一行两个正整数 \(n,m\)。
此后 \(n\) 行,每行两个正整数,分别表示 \(a,b\)。
输出格式
一行一个非负整数,表示数列数对 \(998244353\) 取模的结果。
样例输入
3 10
1 9
4 8
7 10
样例输出
151
20
3
3
1
0
1
1
0
0
提示
对于 \(100\%\) 的数据,\(1\le n,m,a_i,b_i\le 10^5,a_i\le b_i\)。
题解
首先可以想到容斥,定义函数\(f(i,j)=\lfloor\frac{b_i}{j}\rfloor-\lfloor\frac{a_i-1}{j}\rfloor\)
设\(G_i\)代表最大公约数为\(k\)的倍数的数列的个数,对于每个\(G_i\),\(G_i=\prod\limits_{j=1}^n{f(j,i)}\)
但是这样肯定会超时,左思右想想不出来,后来YHH&XWKdalao告诉了我做法,核心优化叫做整除分块
这个东西是什么呢,就是对于一个算式 \(H(n)=\lfloor\frac{n}{i}\rfloor\) 当 \(i\) 从 \(1\) 增大到 \(n\) 时,ta的值最多只会变化\(2\sqrt n\)次,而且是一直变小的
首先把思路反一下,将它变成一道算贡献的题目,刚开始 \(G_j\) 全都是 \(1\) ,枚举每对 \(a_i,b_i\) 和每个\(G_j\) ,每个 \(G_j\)都乘上 \(f(i,j)\),根据整除分块,\(f\) 的值一共最多只会变化\(4\sqrt n\)次,也就是说其实对于\(i\)一定的\(f\)函数,只有\(4\sqrt n\)种不同的值,如果使用区间乘的话,就只需要乘至多\(4\sqrt n\)个不同的值,也可使用差分
还有一些细节,就是分块的左右端点如何算,首先\(H(n)=n\)时,\(i=1\),\(l_1=1\),对于每个 \(1<i\le n\) 有 \(l_i=r_{i-1}+1\),难点就是如何通过 \(l_i\) 算出 \(r_i\)
整除分块例题
Atziluth's Last Contest. 001题解的更多相关文章
- AtCoder Grand Contest 001 题解
传送门 \(A\) 咕咕咕 const int N=505; int a[N],n,res; int main(){ scanf("%d",&n); fp(i,1,n< ...
- AtCoder Beginner Contest 154 题解
人生第一场 AtCoder,纪念一下 话说年后的 AtCoder 比赛怎么这么少啊(大雾 AtCoder Beginner Contest 154 题解 A - Remaining Balls We ...
- AtCoder Beginner Contest 153 题解
目录 AtCoder Beginner Contest 153 题解 A - Serval vs Monster 题意 做法 程序 B - Common Raccoon vs Monster 题意 做 ...
- AtCoder Beginner Contest 177 题解
AtCoder Beginner Contest 177 题解 目录 AtCoder Beginner Contest 177 题解 A - Don't be late B - Substring C ...
- AtCoder Beginner Contest 184 题解
AtCoder Beginner Contest 184 题解 目录 AtCoder Beginner Contest 184 题解 A - Determinant B - Quizzes C - S ...
- M-SOLUTIONS Programming Contest 2020 题解
M-SOLUTIONS Programming Contest 2020 题解 目录 M-SOLUTIONS Programming Contest 2020 题解 A - Kyu in AtCode ...
- AtCoder Beginner Contest 173 题解
AtCoder Beginner Contest 173 题解 目录 AtCoder Beginner Contest 173 题解 A - Payment B - Judge Status Summ ...
- AtCoder Beginner Contest 172 题解
AtCoder Beginner Contest 172 题解 目录 AtCoder Beginner Contest 172 题解 A - Calc B - Minor Change C - Tsu ...
- AtCoder Beginner Contest 169 题解
AtCoder Beginner Contest 169 题解 这场比赛比较简单,证明我没有咕咕咕的时候到了! A - Multiplication 1 没什么好说的,直接读入两个数输出乘积就好了. ...
- AtCoder Beginner Contest 148 题解
目录 AtCoder Beginner Contest 148 题解 前言 A - Round One 题意 做法 程序 B - Strings with the Same Length 题意 做法 ...
随机推荐
- yb课堂之高并发项目必备利器之分布式缓存和本地缓存 《十九》
什么是缓存? 程序经常要调用的对象存储在内存中,方便其使用时可以快速调用,不必去数据库或者其他持久化设备中查询,主要就是提高性能 DNS.前端缓存.代理服务器缓存Nginx.应用程序缓存(本地缓存.分 ...
- 洛谷P1077
这道题和上一道题也是比较像的,基本采用的也是线性dp的思路 状态数组稍微有点不同,这里表示的是当前种数的花时一共的花的数量 #include<iostream> #include<u ...
- 【进阶篇】一文搞清楚网页发起 HTTP 请求调用的完整过程
目录 前言 一.HTTP协议 1.1基本概念 1.2工作原理 二.请求过程 2.1域名解析 2.2TCP 连接 2.3发送 HTTP 请求 2.4服务器应答 2.5响应内容 2.6关闭连接 三.客户端 ...
- Webpack3.x升级至 4.x 小记
近期项目部署遇到点问题,需要升级webpack版本,特此整理一小记,记录升级过程中的依赖包及报错处理. 本次升级的依赖包及对应版本对照表: npm 包 当前版本 升级版本 S/D vue ^2.5.1 ...
- 学习笔记--Java方法重载
Java方法重载 感受 以下代码不使用"方法重载",不使用overload,分析程序存在的缺点 public class OverloadTest01 { // 入口 public ...
- 网络基础 Modbus协议学习总结
协议简介 Modbus协议,首先从字面理解它包括Mod和Bus两部分,首先它是一种bus,即总线协议,总线就意味着有主机,有从机,这些设备在同一条总线上. Modbus支持单主机,多个从机,最多支持2 ...
- CSP2023-J/S 游记
本人 初二 \(\texttt{HA}\) CSP2023 成绩: CSP-J 第一轮:\(86.5\) CSP-S 第一轮:\(41.5\) CSP-J 第二轮:\(100+100+100+0=30 ...
- pytest + allure2.x 踩坑-报告无数据
我按照网上的教程,在用pytest生成完allure可以使用的json数据之后,然后再用allure生成报告,打开,发现我生成的报告中没有数据显示. 1.首先我用pytest生成数据是没有问题的 2. ...
- mysql DCL常用命令
登录数据库: mysql -u root -p 查看本机MySQL中所有的用户 select user ,host from mysql.user; 查看所有数据库: show databases; ...
- LLM并行训练7-混合并行总结
概述 根据前面的系列文章, 对预训练大模型里用到的主要并行加速技术做了一系列拆分分析. 但是在实际的训练里往往是多种并行混合训练. 我们要怎么配置这些并行策略才能让训练框架尽可能的减少通信瓶颈, 提升 ...