c = a mod n - это то же самое, что сказать a = bn + c = (-b) (- n) + c
Если у нас есть c = -1 mod -109, то же самоекак говорится:
-1 = b*(-109) + c for some positive c.
-1 = 0 * (-109) + (-1) so c = -1 OR
c = 108 if -1 = 1*(-109) + 108
Для второго случая аналогично:
1 = b(-109) + c = -b(109) + c
С109> 1
1 = 0(-109) + 1 so c = 1 OR
1 = -0(109) + (-108)
Математически все они эквивалентны, и выбор между ними во многом зависит от реализации со стороны Python, и веская причина поддерживается математической теорией.
Более подробное объяснение Гвидо Ван Россума находится по адресу http://python -history.blogspot.com / 2010/08 / why-pythons-integer-Division-floors.html