Если r = a % n
, то a = n * q + r
для некоторых q
. Это означает, что у вас есть много вариантов значения r
, в зависимости от выбранного значения q
.
Я бы порекомендовал прочитать http://en.wikipedia.org/wiki/Modulo_operation,, в котором говорится, что большинство языков программирования выбирают r
с -n < r < n
. Это означает, что, если r
не равно нулю, у вас есть два варианта значения r
- один положительный, другой отрицательный. Разные языки программирования принимают разные решения о том, выбрать ли положительный или отрицательный. На этой странице вы найдете таблицу, в которой обобщено, что делают разные языки:
- Python выбирает
r
с тем же знаком, что и n
(это то, что вы видите выше).
- C ++ 2011 выбирает
r
с тем же знаком, что и a
(и до стандарта 2011 года его реализация определяется).
Если вы хотите быть уверенным, что вы получили положительный результат в Python, используйте это:
r = a % n
if r < 0:
r += n