Модуль при вычитании с использованием тождеств

В различных тождествах по модулю тождество вычитания утверждает, что:

(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 infixint943    schedule 28.05.2018    source источник
comment
Какие функции представлены $?   -  person Thomas Matthews    schedule 28.05.2018
comment
Поищите в Интернете StackOverflow C++ mod больших чисел.   -  person Thomas Matthews    schedule 28.05.2018
comment
Покажите небольшой пример кода, иллюстрирующий вашу проблему. Опубликовать как текст, без снимков экрана. Снимки экрана сложно вставить в IDE, поэтому мы можем попытаться воспроизвести вашу проблему.   -  person Thomas Matthews    schedule 28.05.2018
comment
$ — это латексный формат.   -  person infixint943    schedule 28.05.2018
comment
Если a, b и c все положительны (или равны нулю для a и b), и вы хотите избежать отрицательного значения из (a%c - b%c) % c, то просто добавьте еще одно c к вычитанию, т.е. (c + a%c - b%c) % c.   -  person Toby Speight    schedule 28.05.2018
comment
отрицательное число является допустимым результатом. В основном вы работаете с en.wikipedia.org/wiki /Кольцо_(математика). ваше отрицательное число находится в том же классе эквивалентности, что и само + модуль.   -  person skeller    schedule 28.05.2018


Ответы (1)


Да. Я думаю, это должно быть следующим образом

((a%c - b%c) % c + c) % c

Если a = 12, b = 7 и c = 10, то (a%c - b%c)%c даст -5. Затем добавление c и изменение его снова приведет к 5, что является правильным ответом.

person Muntasir Ahmed    schedule 28.05.2018
comment
Это не всегда работает, если любой из a, b или c отрицателен. - person Peter; 28.05.2018