「NOIP2009」Hankson 的趣味题
Hankson 的趣味题
【内存限制:$128 MiB$】【时间限制:$1000 ms$】
【标准输入输出】【题目类型:传统】【评测方式:文本比较】
题目描述
Hanks 博士是 BT(Bio-Tech,生物技术)领域的知名专家,他的儿子名叫 Hankson。现在,刚刚放学回家的 Hankson 正在思考一个有趣的问题。
今天在课堂上,老师讲解了如何求两个正整数 $c_1$ 和 $c_2$ 的最大公约数和最小公倍数。现在 Hankson 认为自己已经熟练地掌握了这些知识,他开始思考「求公约数」和「求公倍数」这类问题的一个逆问题,这个问题是这样的:已知正整数 $a_0,a_1,b_0,b_1$,设某未知正整数 $x$ 满足:
1. $x$ 和 $a_0$ 的最大公约数是 $a_1$;
2. $x$ 和 $b_0$ 的最小公倍数是 $b_1$。
Hankson 的「逆问题」就是求出满足条件的正整数 $x$ 。但稍加思索之后,他发现这样的 $x$ 并不唯一,甚至可能不存在。因此他转而开始考虑如何求解满足条件的 $x$ 的个数。请你帮助他编程求解这个问题。
输入格式
第一行为一个正整数 $n$ ,表示有 $n$ 组输入数据。
接下来的 $n$ 行每行一组输入数据,为四个正整数 $a_0,a_1,b_0,b_1$,每两个整数之间用一个空格隔开。
输入数据保证 $a_0$ 能被 $a_1$ 整除,$b_1$ 能被 $b_0$ 整除。
输出格式
共 $n$ 行。每组输入数据的输出结果占一行,为一个整数。
对于每组数据:若不存在这样的 $x$,请输出 $0$;若存在这样的 $x$,请输出满足条件的 $x$ 的个数。
样例
样例输入
2 41 1 96 288 95 1 37 1776
样例输出
6 2
样例说明
第一组输入数据,$x$ 可以是 $9,18,36,72,144,288$,共有 $6$ 个;
第二组输入数据,$x$ 可以是 $48,1776$,共有 $2$ 个。
数据范围与提示
对于 $50\%$ 的数据,保证有 $a_0,a_1,b_0,b_1\leq 10^4$ 且 $n\le 100$。
对于 $100\%$ 的数据,保证有 $1\le a_0,a_1,b_0,b_1\le 2\times 10^9$ 且 $n\le 2000$。
题解
做题经历
以为是数论,果断放弃,看了看数据,发现可以暴搜得一半的分,然后...... $rank$ 出来之后,发现自己 $250pts$ ......
正解
首先对于题意进行分析,题意要求的是
满足使得 $gcd(x,a_0)=a_1,lcm(x,b_0)=b_1$ 的 $x$ 有多少取值。
那么,我们将这些关系分析一下
首先可以肯定这个关系:$a_0\cdot k_1=x$
那么同理,这个关系也是肯定存在的:$x\cdot k_2=b_1$
那么将这两个等式综合一下,可得:$$a_0\cdot k_1k_2=x\cdot k_2=b_1$$
再浅显地理解一下,如果 $b_1%a_0 ≠ 0$ ,那么答案肯定是 $0$ 的。
我们先设 $x={p_1}^{k_1}{p_2}^{k_2}......{p_n}^{k_n}$
然后,根据 $a_0,a_1$ 与 $b_0,b_1$ 分析他们分别对于 $x$ 有什么限制。
首先,我们看第一组 $a_0,a_1$
我们先设
$a_0={b_1}^{t_1}{b_2}^{t_2}......{b_m}^{t_m}$
$a_1={c_1}^{q_1}{c_2}^{q_2}......{c_v}^{q_v}$
首先根据 $gcd$ 的定义,我们可以知道每一个 $q_i=min\{k_i,t_i\}$
那么我们来讨论一下:
- 当 $q_i=t_i$ 时,$k_i≥t_i$,说明这时 $x$ 中的因数 $p_i$ 最少有 $k_i$ 个,但是可以无限多
- 当 $q_i≠t_i$ 时,若 $q_i<t_i$ 则无解,否则必定满足 $k_i=t_i$
然后再分别计数即可。
而对于第二组,也可以用同样的方法进行分析,具体细节不作赘述。
丢个代码:
想看代码?还在码中......