Про разные подходы
В математике «поделить a
на b
с остатком» означает «найти такие числа q
и r
, что будет выполняться равенство b*q + r = a
».
a
- делимое;b
- делитель;q
- неполное частное;r
- остаток.
Например:
11 / 4 = 2, остаток 3.
4 * 2 + 3 = 11
7 / 2 = 3, остаток 1.
2 * 3 + 1 = 7
14 / 5 = 2, остаток 4.
5 * 2 + 4 = 14
А если остаток отрицательный?
В математике принято считать, что остаток должен быть неотрицательным, то есть должно выполняться неравенство 0 <= r < b
. Но ведь физически никто не мешает нам сделать так:
11 / 4 = 2, остаток 3
11 / 4 = 3, остаток -1
Равенство b*q + r = a
по-прежнему выполняется, а остаток по модулю по-прежнему меньше делителя.
Конечно, если делимое и делитель положительные, то такой выбор остатка выглядит странновато. Но давайте поработаем с отрицательными числами:
11 / -4 = -2, остаток 3
11 / -4 = -3, остаток -1
Какой из этих вариантов правильный? На самом деле, оба. Просто существуют разные подходы к делению с остатком:
- деление с округлением к нулю;
- деление с округлением вниз;
- евклидово деление (привычное, как в математике).
Деление с округлением к нулю
«Округлить a
к нулю» означает взять первое целое число, которое идёт на числовой прямой сразу после a
по направлению к нулю.
- округлить к нулю 3.4: получим 3;
- округлить к нулю -3.4: получим -3.
Давайте поделим 11 на -4 и -11 на 4. В обоих случаях получится -2.75. Если округлить к нулю, то будет -2.
Теперь посчитаем остаток. Из формулы b*q + r = a
выводится, что r = a - b*q
. В первом случае: r = 11 - (-4)*(-2) = 11 - 8 = 3
, во втором случае: r = -11 - 4*(-2) = -11 - (-8) = -3
.
То есть если мы округляем результат деления к нулю, то получаем следующую картину:
11 / -4 = -2, остаток 3
-11 / 4 = -2, остаток -3
При делении с округлением к нулю знак остатка всегда совпадает со знаком делимого, а от знака делителя вообще никак не зависит.
Деление с округлением вниз
«Округлить a
вниз» означает взять первое целое число, которое идёт на числовой прямой сразу после a
по направлению к минус бесконечности.
- округлить вниз 3.4: получим 3;
- округлить вниз -3.4: получим -4.
Если мы округляем результат деления вниз, то получаем следующую картину:
11 / -4 = -3, остаток -1
-11 / 4 = -3, остаток 1
Теперь знак остатка совпадает со знаком делителя, а от знака делимого не зависит.
Евклидово деление
Это классический подход, который используется в математике. В нём остаток должен всегда быть положительным, а куда для этого нужно округлять неполное частное - уже не имеет значения.
11 / -4 = -2, остаток 3
-11 / 4 = -3, остаток 1