by grosged » 15 Mar 2014, 18:56
Bonsoir !
Voici ma version du sujet =D
Pour optimiser, je me suis dit de calculer par à-coup (paquets de 6), et aussi
de déchiffrer/ajuster les résultats intermédiaires en plaçant les chiffres
"de gauche à droite" (donc à partir de L1(1...)
(c'est pour cette raison que le résultat final doit être affiché depuis le dernier élement
de L1 vers le premier)
à noter que ce n'est qu'à partir de 12! que l'on aura un affichage "1chiffre/élement"
L'avantage de tout ça ? ça calcule ,par exemple, 135! en 86 secondes sur ma TI-83 (6mhz)
Edit: au delà de 135! ça risque fortement de bugger...
- Code: Select all
ClrAllLists ;efface toutes les listes
Prompt N ;demande N
N-6iPart(N/6-1→A ;on va traiter par paquets de 6
Ans!→L1(1 ;maintenant qu'on a (x-1)! dans L1,
For(X,A+1,N-5,6 ;par ''paquets de six", on
L1X(X+1)(X+2)(X+3)(X+4)(X+5→L1 ;multiplie L1 par x(x+1)(x+2)(x+2)(x+3)(x+4)(x+5
Delvar Z ; initialise et
For(Y,1,dim(L1 ; lance la transformation "un chiffre par élement"
.1(iPart(Z)+L1(Y→Z ; on ne garde que les unités
10fPart(Ans→L1(Y ; et ajoute le restant (partie entière/10)
End ; à l'élément voisin, etc...
While int(Z ; on est arrivé au bout de L1
.1iPart(Z→Z ; mais c'est pas fini : on continue d'étaler
10fPart(Ans→L1(Y ; "chiffre après chiffre" sur L1
Y+1→Y ; et ce, jusqu'à ce qu'il ne reste que des unités
End ; fin de boucle
End ; fin de boucle
seq(L1(X),X,dim(L1),1,-1 ; affiche le résultat "en miroir"
élaboré sur TI-83, 160 octets (172 après transfert)
Last edited by grosged on 15 Mar 2014, 19:21, edited 3 times in total.