Столкнулся недавно с такой вот проблемой:
int r, n, R; unsigned long long H; ... r = min(R, int((H * H + H * r) % n));
Неправильный ответ
int r, n, R; unsigned long long H; ... int tmp = (H * H + H * r) % n; r = min(R, tmp);
Полное решение
чем отличаются эти два куска кода?