时隔将近一年,重新回味这道题,还是惊叹于官方题解及类似题解先看出结论再证明的数学直觉,但是今天我推出了一种不太需要动脑子的推法,比较适合我这种老年人。
先来回顾一下官方题解的结论与证明。令
b=2x5yb′,那么最终答案
d 一定满足
d=2p5qb′。假设存在一个不含因子
2,5 的大于
1 的正整数
g,若
- g∣b 且 g∤d
- 因为 gcd(a,b)=1 且 g∤d,所以 g∤ad。
- 又有 g∣bc,所以 bdad+bc 分母中的 g 约不掉,这就意味这其一定不是有限小数。
- g∤b 且 g∣d
- 其实由对称性可以得出结论。
- 因为 g∣ad,并且 bdad+bc 要是有限小数,所以要约掉 g 一定要满足 g∣bc,但是 g∤b,所以 gcd(g,c)>1,所以 gcd(d,c)>1,不满足 c 的最小性(把 d 中除去因子 g 解依然合法且更优 )。
这就意味着
g∣b 与
g∣d 之间是充要的,即
b,d 除去因子
2,5 的部分相同。
所以直接
log2 枚举
p,q,然后扩欧求
ad+bc=kad(其中
c,k 为未知数)的解,对
c 取最小即可。
接下来我给出自己的推导,会稍微冗长一些,但思路基本没有任何拐弯。
首先约定
b=2x5yb′,d=2p5qd′,则有
ba+dc=2x+p5y+q1⋅b′d′2p5qad′+2x5yb′c
要想使其为有限小数,右边的分数的分子必须得把
b′d′ 给约掉,即要存在正整数
k1 满足
2p5qad′+2x5yb′c2x5yb′cd′c=k1b′d′=(k1b′−2p5qa)d′=2x5yb′k1b′−2p5qa
因为我们的初始条件约定
d′ 不能含因子
2,5,所以右边分母的
2x5y 要被约掉,即要存在非负整数
k2 满足
k1b′−2p5qa=k22x5y
使用扩欧解出最小的
k2,因为
b′∣k1b′ 且
gcd(2p5qa,b′)=1,所以
gcd(k2,b′)=1,即
d′c=b′k2 不能再化简,故此时
c=k2,d′=b′,对所有情况的
c 取最小即可,总时间复杂度
O(Tlog3V),
V 是值域。
其中
d′=b′ 也印证了官方题解的结论,即合法且互质的解一定满足
b 和
d 除去因子
2,5 后剩下的因子相同。