- и b имеют длину 64 бита.
Код: Выделить всё
a - может переполниться до 128 бит (не всегда, но, по крайней мере, достаточно часто)
Код: Выделить всё
a*b - имеет длину 64 бита.
Код: Выделить всё
c - Результат (a * b)/c должен умещаться в 64-битном формате.
- Нам нужно определить, не происходит ли переполнение, но результат в этом случае не имеет значения.
- Нет выделения памяти (например, построение BigInteger не разрешено).
- Он использует только простые/быстрые операции процессора
- Выдает точные целочисленные результаты
- Он работает в O(1)
- Он работает в O(1) пробел (без рекурсии и т. д.)
Подробнее здесь: https://stackoverflow.com/questions/635 ... -algorithm