Блог пользователя om1429888

Автор om1429888, история, 2 года назад, По-английски
  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

»
2 года назад, # |
Rev. 5   Проголосовать: нравится 0 Проголосовать: не нравится

Note that if $$$\gcd(a, b) \not\mid c$$$, no solution exists. Otherwise, divide $$$a, b, c$$$ by this $$$\gcd$$$, now we assume $$$\gcd(a, b) = 1$$$.

Let $$$x_0, y_0$$$ be any integer solution of the equation (which can be found using Euclid's algorithm).

One can prove that all solutions of the equation must be of the form $$$(x_0 - b n, y_0 + a n)$$$ for some integer $$$n$$$.

Now, we end up with the problem of counting integer $$$n$$$ such that $$$x_1 \le x_0 - b n \le x_2$$$, $$$y_1 \le y_0 + a n \le y_2$$$.

This can be done by just getting min and max bounds on $$$n$$$ using the above inequalities. Make sure to take care of all the cases such as $$$a = 0$$$, $$$a < 0$$$, when the upper bound is less than the lower bound, etc..

  • »
    »
    2 года назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    how to find the bounds?

    • »
      »
      »
      2 года назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      If $$$b > 0$$$, you have

      $$$x_1 \le x_0 - b n \le x_2 \iff x_0 - x_1 \ge b n \ge x_0 - x_2 \iff \frac{x_0 - x_1}{b} \ge n \ge \frac{x_0 - x_2}{b}$$$

      If b < 0, the inequalities are reversed.

      You similarly get another relation from the other inequality.

      Take note of the fact that what I have written above is real division, not integer division.

»
2 года назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

You can take reference from CP-algorithms's tutorial on Linear Diophantine Equations. They have the exact solution. There are a lot of edge cases to consider like if a == 0 or b == 0 etc, or a < 0 or b < 0.

Python Solution. Note that '//' is a floor divide in Python