对于四个预先定义的变量N,M,A和B,我希望以某种方式得到x和y,使得两者之间的差异最小化,我们将如何实现这一点?
注意:A和B是截然不同的!
编辑:示例以使其更清晰,
说N = 4,M = 5.然后A = 2且B = 4,显而易见的解是x等于4,y = 1,得到9和10.差值为1.但这是琐碎的,数量越多,单凭我的大脑就不能产生快速的结果,我很想要一个更通用的解决方案。
答案 0 :(得分:2)
Ax - By
可以表示gcd(A, B)
的任意整数倍,而不是其他数字。 gcd(A, B)
到M - N
的最接近的整数倍是floor((M - N)/gcd(A, B)) * gcd(A, B)
或ceil((M - N)/gcd(A, B)) * gcd(A, B)
。这可以将M-N
向下舍入或向上舍入到gcd(A, B)
的最接近倍数。
使用Extended Euclidean Algorithm解决Ax - By = gcd(A, B)
,然后将x
和y
乘以floor((M - N)/gcd(A, B))
或ceil((M - N)/gcd(A, B))
,具体取决于哪个第一段中的两个表达式最接近M - N
。