je lance un défi mathématique.
Je demande que vous produisiez un code plus rapide que mon code pour calculer une factorielle.
Ex : Factoriel 7 = 1*2*3*4*5*6*7
Comme le nombre est tres vite enorme, vous pourrez le stocker dans une banque d'octet. Ce nombre sera donc en base 256.
Pour etre bien certain de la bonne marche de votre code, voici la factorielle de 200 (du moins, ce que ma routine donne; a verifier donc) :

Le but de votre programme sera de calculer dans un minimum de temps la factorielle de 200 000 !!!
Pas la peine d'afficher le resultat mais verifiez quand meme qu'elle commence par (les 5 octets de poids fort) : D3,E2,84,C6,77
Bien sur, les nombreux octets de poids faibles sont des zero.
DONC, pour ma part, je sais calculer la factorielle de 200000 en 75672 ms (avec mon programme compilé). Mon ordi datant de 6 ans environ, votre programme sur VOTRE ordi mettra un temps different.
Le concours est lancé et je vous devoilerais mon moteur mais pas tout de suite. Je laisse votre geni creatif tourner.
Voici quand meme le squelette de mon programme :
Code : Tout sélectionner
OpenConsole()
;cmb=500000
PrintN("SPH(2009) - Calcul la factorielle d'un nombre")
PrintN("Exemple : Factorielle de 7 = 1*2*3*4*5*6*7")
re:
PrintN(" ")
Print("Factorielle de : ")
a$=Input()
cmb=Val(a$)
If cmb<1
Goto re
EndIf
;Goooooooooooo
temps = GetTickCount_()
;========================================
Dim noeud.w(cmb*3)
noeud(0)=1
ici.l=1
reste.l=0
reste2.l=0
For np=1 To cmb
If np%10000=0
af.f=ici/np
PrintN("Factorielle de : "+Str(np)+" -- Produit en "+Str((GetTickCount_()-temps)/1000)+"s -- "+StrF(af))
EndIf
;;;;;;;;;
;========================================
;;; MON MOTEUR
;========================================
temps = GetTickCount_() - temps
;temps /1000
;MessageRequester("Millisecondes : ",Str(temps))
PrintN("Millisecondes : "+Str(temps))
;STOOOOOOOOOOP
;;;;
If CreateFile(0, "d:\Factorielle "+Str(cmb)+"_"+Str(temps)+"ms.bank")
Else
MessageRequester("Erreur", "Fichier impossible à créer...")
End
EndIf
For octet=0 To ici
WriteWord(0,noeud(octet))
Next
CloseFile(0)
;;;;
PrintN(" ")
PrintN("--FIN--")
For i=0 To 5
Beep_(i*100,60)
Next
Repeat
Delay(1000)
ForEver
Allez, le concours est lancéééééééé
