Предположим, у меня есть два long long, a и b, которые мне нужно умножить, а затем получить значение mod k для некоторого большого k, такого, что a, b и k находятся в диапазоне long long, но не int. Для простоты a, b ‹ k.
Таким образом, код будет:
long long a, b, k;
cin >> a >> b >> k;
cout << (a * b)%k << "\n";
Однако, поскольку a и b такие большие, если вы умножаете, как указано выше, и оно переполняется и становится отрицательным, тогда mod k будет отрицательным числом и неправильным.
Как убедиться, что значение mod k правильное?
Изменить: в качестве бонуса, как это работает на Java? Это то же самое, что и ожидалось? Или нужен BigInteger?