方程式a + bx = c + dy
では、すべての変数は整数です。a
、b
、c
、およびd
が知られています。x
との積分解を見つけるにはどうすればよいy
ですか? b
私の考えが正しければ、との最小公倍数で区切られた解は無数にありますが、d
必要なのは 1 つの解だけで、残りは計算できます。次に例を示します。
a = 2
b = 3
c = 4
d = 5
a + bx: (2, 5, 8, 11, 14)
c + dy: (4, 9, 14, 19, 24)
a + bx intersects c + dy at 14, so:
x = 4
y = 2
現在、 (疑似コード)x
の整数値が見つかるまで、整数値をループしています。y
function integral_solution(int a, int b, int c, int d) {
// a + bx == c + dy
// (a + bx - c) / d == y
// Some parameters may have no integral solution,
// for example if b == d and (a - c) % b != 0
// If we don't have a solution before x == d, there is none.
int x = 0;
while (x < d)
{
if ((a + bx - c) % d == 0)
{
return [x, (a + bx - c) / d];
}
x++;
}
return false;
}
これを行うためのより良い方法があるように感じます。ループなしで x と y を見つける方法はありますか? それが重要であれば、私はC++を使用しています。