С недавним избиением Python , вот попытка показать сильные стороны Python. Ваша задача состоит в том, чтобы написать программу, которая вычисляет факториал как можно большего числа в течение 10 секунд.n
Ваша оценка будет (highest n for your program on your machine)/(highest n for my program on your machine)
правила
- Вы должны вычислить точное целочисленное решение. Поскольку факториал будет намного выше, чем у 64-разрядного целого числа без знака, вы можете использовать строки, если ваш язык не поддерживает большие целые числа
- Стандартные лазейки запрещены. В частности, вы не можете использовать какие-либо внешние ресурсы.
- Только часть вычисления (включая время для любых обходных путей с использованием строк) добавляет к общему времени, которое должно быть в среднем менее 10 секунд.
- Только однопоточные программы.
- Вы должны сохранить вывод в легко распечатываемой форме (поскольку печать занимает много времени) (см. Мою программу ниже), строку, переменную, массив символов и т. Д.
РЕДАКТИРОВАТЬ:
- Ваша программа должна дать правильный вывод для всех
n
:1 <= n <= (your highest n)
EDIT2:
- Я не хочу говорить это явно, но использование встроенных факторных функций вашего языка подпадает под стандартные лазейки http://meta.codegolf.stackexchange.com/a/1078/8766 Извините Mathematica и Sage
Моя программа
from __future__ import print_function
import time
def factorial( n ):
return reduce( ( lambda x , y : x * y ) , xrange( 1 , n + 1 ) , 1 )
start = time.clock()
answer = factorial( 90000 )
end = time.clock()
print ( answer )
print ( "Time:" , end - start , "sec" )
Самый высокий балл выигрывает. Для справки, мой код может справиться n = 90000
примерно за 9.89
секунды на Pentium 4 3.0 ГГц
РЕДАКТИРОВАТЬ: все могут, пожалуйста, добавить счет, а не только самый высокий п . Просто высшее n
не имеет значения само по себе, так как оно зависит от вашего оборудования. Иначе невозможно иметь объективный критерий победы. ani0sha anwer делает это правильно.
У нас есть победитель. Я не принял java-ответ /codegolf//a/26974/8766, так как он похож на юбки, близкие к http://meta.codegolf.stackexchange.com/a/1080/8766
factorial(Inf)
возвращает Inf
в доли секунды.
operator.mul
вместо лямбда-функции