题意: 解方程:
x
w
+
y
d
=
p
xw+yd=p
xw+yd=p
x
+
y
+
z
=
n
x+y+z=n
x+y+z=n 其中:
0
<
n
<
1
0
12
0 < n < 10^{12}
0<n<1012
0
<
p
<
1
0
17
0< p < 10^{17}
0<p<1017
0
<
w
<
d
<
1
0
5
0<w < d < 10^{5}
0<w<d<105 以上各个数均为正整数,输出一组解,不存在则输出-1
思路:此题题意简单,重点在于如何优化,因为此题给出的数据范围还是比较大的。笔者想出来的解法是,因为w比d大,想要在
x
+
y
<
=
n
x+y<=n
x+y<=n范围内找到一组x,y满足题意,那y值应该要尽可能小,所以我们y从0开始枚举,到第一个令
p
−
y
∗
d
p-y*d
p−y∗d可以被w整除的数为止。上界是w,因为
w
∗
d
w*d
w∗d必然是这两者的公倍数,倘若在这之前找不到满足条件的y,这之后也必找不到。之后验证x和z是否为正整数即可,代码如下: