Экспоненциальные вычисления в Python

экспериментируя с Эйлер 99, Я заметил, что эти операции имеют разное время:

>>> 632382**518061  # never finishes..

>>> 632382**518061 > 519432**525806  # finishes in few seconds
True

интересно, в чем причина этого?

1 ответов


дело в том, что python пытается напечатать первый результат. Но это число имеет миллиард цифр, и python не сбрасывает вывод, пока не будет обнаружена новая строка, которая после отправки всех цифр на стандартный вывод. Как отметил @abarnert, что во много раз хуже, это преобразование числа в строку для его печати. Это требует значительного выделения памяти и вычислительной мощности. С другой стороны, второе выражение просто должно напечатать True. Вы можете проверить это, если назначите первое выражение:

 >>> a = 632382**518061

таким образом, выход числа подавляется.