双重取模警报
题目背景
在 模运算实验室 中,研究员会对同一个整数 x 进行两种不同顺序的 双重取模 运算,用来检测系统是否出现异常。由于设备结构不同,两种顺序可能产生不同结果,从而触发报警。
题目描述
给定两个正整数 a,b。对任意非负整数 x,定义两种运算结果:
- 方案 A:F(x)=((xmoda)modb)
- 方案 B:G(x)=((xmodb)moda)
如果某个整数 x 满足 F(x)=G(x),则称 x 为一个 异常数 (会触发警报)。
你将收到 q 次查询,每次给出一个区间 [li,ri],请你计算:在该区间内一共有多少个整数 x 是异常数。
说明:umodv 表示 u 除以 v 的余数。
输入格式
第一行一个整数 t,表示测试用例数量。
接下来对于每个测试用例:
- 第一行三个整数 a,b,q;
- 接下来 q 行,每行两个整数 li,ri,表示一次查询区间。
输出格式
对每个测试用例,输出一行,包含 q 个整数(用空格分隔),依次表示每个查询 [li,ri] 内异常数的个数。
样例输入输出
样例输入
2
4 6 5
1 1
1 3
1 5
1 7
1 9
7 10 2
7 8
100 200
样例输出
0 0 0 2 4
0 91
样例解释
以第一组测试用例 a=4,b=6 为例:
- 在区间 [1,5] 内没有异常数,所以输出为 0;
- 在区间 [1,7] 内有 2 个整数会触发 F(x)=G(x),因此该次输出为 2。
(其余查询同理。)
数据范围与约定
- 1≤t≤100
- 1≤a,b≤200
- 1≤q≤500
- 1≤li≤ri≤1018
子任务划分
| 子任务编号 |
额外限制 |
分值 |
| 1 |
ri≤106 |
20 |
| 2 |
ri≤1012 |
30 |
| 3 |
无额外限制(原数据范围) |
50 |