W związku z ostatnim uderzeniem w Python , oto próba pokazania mocnych stron Pythona. Twoim wyzwaniem jest napisanie programu, który oblicza silnię tak dużej liczby, jak to możliwe, w ciągu 10 sekund.n
Twój wynik będzie (highest n for your program on your machine)/(highest n for my program on your machine)
Zasady
- Musisz obliczyć dokładne rozwiązanie liczb całkowitych. Ponieważ silnia byłaby znacznie wyższa niż to, co może zmieścić się w 64-bitowej liczbie całkowitej bez znaku, możesz użyć ciągów, jeśli twój język nie obsługuje dużych liczb całkowitych
- Standardowe luki są zabronione. W szczególności nie można używać żadnych zasobów zewnętrznych.
- Tylko część obliczeniowa (obejmuje czas na wszelkie obejścia wykorzystujące ciągi) dodaje do całkowitego czasu, który powinien być średnio poniżej 10 sekund.
- Tylko programy jednowątkowe.
- Musisz przechowywać dane wyjściowe w formie łatwej do wydrukowania (ponieważ drukowanie wymaga czasu) (patrz mój program poniżej), ciąg znaków, zmienna, tablica znaków itp.
EDYTOWAĆ:
- Twój program musi dawać prawidłowe dane wyjściowe dla wszystkich
n
:1 <= n <= (your highest n)
EDYCJA 2:
- Nienawidzę mówić tego wprost, ale korzystanie z wbudowanych funkcji czynnikowych twojego języka podlega standardowym lukom http://meta.codegolf.stackexchange.com/a/1078/8766 Przepraszamy Mathematica i Sage
Mój program
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" )
Najwyższy wynik wygrywa. Dla przypomnienia, mój kod może zarządzać n = 90000
w około 9.89
sekundach na Pentium 4 3,0 GHz
EDYCJA: Czy każdy może dodać wynik, a nie tylko najwyższą liczbę n . Po prostu najwyższy n
nie ma żadnego znaczenia, ponieważ zależy od twojego sprzętu. W przeciwnym razie nie można mieć obiektywnego kryterium wygranej. Odpowiedź ali0sha robi to poprawnie.
Mamy zwycięzcę. Nie zaakceptowałem odpowiedzi java /codegolf//a/26974/8766, ponieważ to rodzaj spódnic blisko http://meta.codegolf.stackexchange.com/a/1080/8766
factorial(Inf)
zwraca Inf
w ułamku sekundy.
operator.mul
zamiast funkcji lambda