Content

有 \(t\) 组询问,每组询问给定四个整数 \(a,b,c,d\),请求出满足

\[\dfrac{a}{x}+\dfrac{b}{c}=\dfrac{d}{y}
\]

的正整数对 \((x,y)\) 的个数。

数据范围:\(0\leqslant t\leqslant 20,1\leqslant a,b,c,d\leqslant 10^6,d\times c\leqslant 10^6\)。

Solution

提示性很强的一道题目。

我们先来尝试化简一下这个式子:

两边同时乘以 \(xcy\),得 \(acy+bxy=dcx\)。

把含有 \(x\) 的项移到左边,得到 \(bxy-dcx=-acy\)

整理可得 \((dc-by)x=acy\)

\(\therefore x=\dfrac{acy}{dc-by}\)

化简到这里应该可以明白了:我们从小到大枚举 \(y\),看是否有 \(acy\mod(dc-by)=0\),如果满足的话必然会存在整数 \(x\)。

下界显然是 \(1\),但是如何确定 \(y\) 枚举的上界呢?

让我们再来看看题目:

……满足 \(\dfrac{a}{x}+\dfrac{b}{c}=\dfrac{d}{y}\) 的正整数对 \((x,y)\) 的个数。

……\(1\leqslant a,b,c,d\leqslant 10^6\)。

是否发现了什么?

题目中限制了 \(x,y,a,b,c,d\) 均为正整数!

而又因为 \(acy\) 必然是正整数,所以想要让 \(x\) 为正整数,必然要满足 \(dc-by\) 的结果也是个正整数才行,也就是 \(dc-by>0\)。

再以 \(y\) 为主元化简这个不等式:

\(-by>-dc\)

\(\therefore y<\dfrac{dc}{b}\)。

这下你应该就明白了。

但是!这里会出现一个 bug:当 \(\dfrac{dc}{b}\) 的结果是一个整数的时候,枚举的时候就不能够枚举到 \(\dfrac{dc}{b}\)。理由很容易想通。

所以,我们应当分类讨论一下上界:

  • 当 \(b\mid dc\) 的时候,上界就是 \(\dfrac{dc}{b}-1\)。
  • 否则,上界就是 \(\dfrac{dc}{b}\)。

以为我是在胡闹?再看题目:

……\(d\times c\leqslant 10^6\)。

好的,现在可以保证这样枚举不会爆炸了。于是就可以愉快地枚举了。

Code

int t, a, b, c, d;

int main() {
t = Rint;
while(t--) {
a = Rint, b = Rint, c = Rint, d = Rint;
int ans = 0;
F(y, 1, d * c / b - (!((d * c) % b) ? 1 : 0)) {
if(1ll * d * c - 1ll * b * y == 0) continue; //该行可省略
if(!((1ll * a * c * y) % (1ll * d * c - 1ll * b * y)))
ans++;
}
printf("%d\n", ans);
}
return 0;
}

LuoguP7094 [yLOI2020] 金陵谣 题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. java番外茶余饭后闲聊

    java番外茶余饭后闲聊 **本人博客网站 **IT小神 www.itxiaoshen.com 今天聊点题外话没事时可以作为平时沟通交流的谈资,接下来一起简单了解下个人知晓对Java界开发产生深远影响 ...

  2. 如何在 Kubernetes 集群中玩转 Fluid + JuiceFS

    作者简介: 吕冬冬,云知声超算平台架构师, 负责大规模分布式机器学习平台架构设计与功能研发,负责深度学习算法应用的优化与 AI 模型加速.研究领域包括高性能计算.分布式文件存储.分布式缓存等. 朱唯唯 ...

  3. 洛谷 P4900 - 食堂(推式子)

    洛谷题面传送门 首先推式子: \[\begin{aligned} ans&=\sum\limits_{i=A}^B\sum\limits_{j=1}^i\{\dfrac{i}{j}\} \en ...

  4. P5896 [IOI2016]aliens

    *IX. P5896 [IOI2016]aliens DP 优化方法大杂烩,详解 wqs 二分及其注意事项,斜率优化等其它 DP 优化方法. **** 团队赛 T6,没想到是 IOI 原题.当时看出来 ...

  5. DirectX12 3D 游戏开发与实战第九章内容(上)

    仅供个人学习使用,请勿转载. 9.纹理贴图 学习目标: 学习如何将局部纹理映射到网格三角形上 探究如何创建和启用纹理 学会如何通过纹理过滤来创建更加平滑的图像 探索如何使用寻址模式来进行多次纹理贴图 ...

  6. 【GS文献】从家畜到植物,通过基因组选择提高遗传增益

    目录 说明 1.前言 2.植物GS瓶颈 3.提高GS预测的准确性 4.GS与现代育种技术结合 5.GS开源育种网络 说明 Enhancing Genetic Gain through Genomic ...

  7. C语言 指针数组指针

    指向指针数组的指针. 1 #include <stdio.h> 2 3 int main(void) 4 { 5 char *pa[4]={"aaaaa"," ...

  8. 在Linux下搭建nRF51822的开发烧写环境(makefile版)

    http://www.qingpingshan.com/m/view.php?aid=394836

  9. Docker环境中部署Prometheus及node-exporter监控主机资源

    前提条件 已部署docker 已部署grafana 需要开放 3000 9100 和 9090 端口 启动node-exporter docker run --name node-exporter - ...

  10. Linux修改默认挂载NFS协议版本

    系统版本:CentOS Linux release 7.4.1708 (Core) $ vi /etc/nfsmount.conf # # /etc/nfsmount.conf - see nfsmo ...