Какой остаток от деления -1 на 5 в Python?

Почему в Python результат вычисления 1 % 5 равен 1, а результат -1 % 5 равен 4?
  • 2 октября 2024 г. 11:33
Ответы на вопрос 3
В Python операция остатка от деления (`%`) всегда возвращает результат с тем знаком, который соответствует делителю. Это значит, что результат остатка будет всегда неотрицательным, если делитель положительный.

Когда мы берем остаток от деления -1 на 5, мы можем это представить следующим образом:

- Если мы делим -1 на 5, получаем -1 (целая часть) и, чтобы получить неотрицательный остаток, добавляем 5, чтобы привести его в диапазон от 0 до 4.
- То есть: 
  \[
  -1 = -1 \cdot 5 + 4
  \]
  Таким образом, остаток будет равен 4.

Вот несколько примеров:

```python
print(-1 % 5)  # Вывод: 4
print(1 % 5)   # Вывод: 1
print(6 % 5)   # Вывод: 1
print(-6 % 5)  # Вывод: 4
```

Результаты:

- `1 % 5` равен 1, потому что 1 меньше 5, и остаток просто равен 1.
- `-1 % 5` равен 4, потому что, как объяснялось выше, мы ищем неотрицательный остаток, который находится в диапазоне от 0 до 4 для деления с 5.

Таким образом, остаток от деления в Python всегда приводит к неотрицательному значению, когда делитель положительный.
По определению деления. Школа 3 класс. 
Когда мы делим - мы отвечаем на вопрос "сколько раз от делимого нужно отнять делитель, чтобы получился 0". Остаток - это то что лишнее остаётся, что уже отнять мы не можем, не уйдя в минус.
Остаток всегда больше нуля.
При делении отрицательного числа на целое - мы наоборот прибавляем делитель к делимому, пока мы не получим 0 или положительное число.

Более формально это выглядит так:

Для любых целых чисел a и b, причём b != 0, найдётся единственная пара целых чисел q и r, таких что a = q * b + r, где 0 <= r < |b|.

a - делимое
b - делитель
q - частное (целое)
r - остаток

Вот и получается
1 = 0 * 5 + 1
-1 = -1 * 5 + 4
Потому что авторы питона реализовали математическую операцию modulo, а не остаток от деления. 
А в математике X mod N всегда даёт значения в диапазоне [0, N).
https://ru.wikipedia.org/wiki/%D0%A1%D1%80%D0%B0%D...
Похожие вопросы