Разумеется, в таких случаях неявно предполагается, что всевозможные значения, возникающие в ходе вычислений, не приводят к переполнению разрядности. Хотя формально, даже для записи натурального числа из диапазона от 1 до
требуется
памяти, но на практике почти всегда считают, что это
.
Но тут могут быть нюансы, действительно существенные на практике.
Есть, например, такая задачка: дан массив из
различных натуральных чисел, каждое из которых не превосходит
. Таким образом, в массиве есть все числа от 1 до
, кроме одного. Нужно его найти (разумеется, быстро, за
времени и за вот эту вашу
дополнительной памяти).
Решение: сумма всех
чисел от 1 до
известна, нужно из неё вычесть по очереди все числа массива, и то, что получится, и будет искомым числом.
Конечно же, здесь неявно подразумевается, что сумма (
) умещается в диапазон представимых целых чисел.
Модифицируем задачу: теперь чисел
, и нужно найти два отсутствующих числа.
Возможное решение: рассчитаем произведение
и сумму
всех чисел от 1 до
, далее будем (делить на/вычитать из него) все числа массива последовательно, пока не получим произведение и сумму двух искомых чисел. Потом воспользуемся теоремой Виета, решим квадратное уравнение и получим сами числа.
Всё так же просто и красиво, но вот тут уже есть нюанс.
имеет разрядность
, и тут уже нельзя подразумевать, что его результат влезет в диапазон представления машинного числа. Собственно, и вычислить
за время
никак не получится.