Приближение Стирлинга к n! (n/e)^n * sqrt (2 * pi * n). Это имеет приблизительно n * log (n/e) цифры.
Вы вычисляете (n * 1e8)!^2. Это будет иметь примерно 2 * n * 1e8 * log (n * 1e8/e) цифры, равные 2e8 * n * (17 + log (n)). Предполагая, что n относительно мало и log (n) пренебрежимо мало, это 3.4e9 * n цифр.
Вы можете хранить около 2,4 цифр в байте, поэтому ваш результат будет использовать (1.4 * n) гигабайт ОЗУ, предполагая, что Python может эффективно хранить номер.
32-разрядная вычислительная машина может занимать не более 4 ГБ ОЗУ, поэтому теоретически возможно вычислять n = 1 или 2, но для n = 3 машина не может даже удерживать результат в ОЗУ. По мере того, как вы вычисляете свой результат, Python должен будет хранить в RAM несколько бинарных (например, временных переменных), поэтому фактическое использование памяти будет выше, чем предлагаемые выше вычисления.
На практике я бы ожидал, что на 64-битной машине с большим количеством оперативной памяти вы никогда не сможете получить результат для этого расчета на Python - машина будет тратить все свое время на сбор мусора.
Возможный дубликат [Обработка очень больших чисел в Python] (http://stackoverflow.com/questions/538551/handling-very-large-numbers-in-python) –
Почему вы думаете, что это переполняет? –
Можете ли вы привести пример того, как результаты с использованием Python отличаются от ожидаемых результатов? – casevh