106.不定方程
时间: 0.50 sec.
空间: 4096 KB
这是一个不定方程 ax + by + c = 0. 你被告之a,b,c,x1,x2,y1,y2。求方程有多少组整数解(x, y)满足: x1<=x<=x2, y1<=y<=y2。
输入
包含用空格或回车隔开的 a,b,c,x1,x2,y1,y2。它们都是绝对值不超过 108的整数。
输出
答案。
样例输入
1 1 -3
0 4
0 4
样例输出
4
【解题思路】
应该说这是一道数学题……纯到不能再纯的数学题。
先把a,b等于零的情况特判掉,否则后面会挂。
首先我用扩展欧几里得算法求出一组ax+by=gcd(a,b),把解当成一个平面坐标,当然这个解很可能不在x1-x2,y1-y2这个矩形之内。
由线性组的性质,我们可以想到所有的解(x,y)必定是平面上一条直线上的一些离散点。
我们考虑把“矩形-约束-斜线离散点”转化成“区间-约束-水平线离散点”
用点斜式方程解出y=y1,y2时x的值,更新x1,x2(这里要根据斜率正负分情况讨论上下界)
这样我们就是已知一个点x和两相邻点之间的距离dx(dx=b div gcd(a,b))求这样的点在区间内的个数
讨论x与区间的位置关系以及区间两端的可选情况即可。详见以下代码。
【AC代码】