В различных тождествах по модулю тождество вычитания утверждает, что:
(a - b) % c = (a % c - b % c) % c
Но если я посмотрю на этот пример, где a = 508, b = 201 and c = 101
, ответ, который я получаю, используя идентификатор, будет отрицательным, что неверно. В моей программе на С++ используется факториал огромных чисел (начинается не с 1, а с введенного пользователем другого числа) по модулю 10^9 + 7
минус другое факториальное число (меньше первого значения) по модулю 10^9 + 7
, но я получаю отрицательные значения или переполнения, а используя unsigned long long.
Есть ли возможная реализация для получения правильного вывода?
$
? - person Thomas Matthews   schedule 28.05.2018a
,b
иc
все положительны (или равны нулю дляa
иb
), и вы хотите избежать отрицательного значения из(a%c - b%c) % c
, то просто добавьте еще одноc
к вычитанию, т.е.(c + a%c - b%c) % c
. - person Toby Speight   schedule 28.05.2018