Avec le récent dénigrement de Python , voici une tentative pour montrer les points forts de Python. Votre défi est d'écrire un programme qui calcule la factorielle d'un nombre aussi élevé que possible en 10 secondes.n
Votre score sera (highest n for your program on your machine)/(highest n for my program on your machine)
Règles
- Vous devez calculer une solution entière exacte. Étant donné que la factorielle serait beaucoup plus élevée que ce qui peut tenir dans un entier non signé 64 bits, vous pouvez utiliser des chaînes si votre langue ne prend pas en charge les grands entiers
- Les failles standard sont interdites. En particulier, vous ne pouvez utiliser aucune ressource externe.
- Seule la partie calcul (qui inclut le temps pour toutes les solutions de contournement utilisant des chaînes) s'ajoute au temps total qui doit être inférieur à 10 secondes en moyenne.
- Programmes à thread unique uniquement.
- Vous devez stocker la sortie sous une forme facilement imprimable (car l'impression prend du temps) (voir mon programme ci-dessous), chaîne, variable, tableau de caractères, etc.
ÉDITER:
- Votre programme doit donner la sortie correcte pour tous
n
:1 <= n <= (your highest n)
EDIT2:
- Je déteste le dire explicitement, mais l'utilisation des fonctions factorielles intégrées de votre langage relève des lacunes standard http://meta.codegolf.stackexchange.com/a/1078/8766 Désolé Mathematica et Sage
Mon programme
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" )
Le score le plus élevé l'emporte. Pour mémoire, mon code peut se gérer n = 90000
en 9.89
quelques secondes sur un Pentium 4 3.0 GHz
EDIT: Tout le monde peut-il s'il vous plaît ajouter le score plutôt que le n le plus élevé . Le plus haut n
n'a aucune signification en soi car il dépend de votre matériel. Sinon, il est impossible d'avoir un critère de gain objectif. La réponse de ali0sha le fait correctement.
Nous avons un gagnant. Je n'ai pas accepté la réponse java /codegolf//a/26974/8766 car il s'agit de jupes proches de http://meta.codegolf.stackexchange.com/a/1080/8766
factorial(Inf)
retourne Inf
en une fraction de seconde.
operator.mul
place de la fonction lambda