factorielle
Modérateur : Politburo
factorielle
Salut,
J'ai passé quelques heures sur mon petit PC-1500 à lui faire calculer tous les chiffres d'une factorielle.
Y a t'il un moyen de déterminer le nombre de chiffres du résultat ?
Ben
J'ai passé quelques heures sur mon petit PC-1500 à lui faire calculer tous les chiffres d'une factorielle.
Y a t'il un moyen de déterminer le nombre de chiffres du résultat ?
Ben
- leglatin
- Fonctionne à 1200 bauds
- Messages : 761
- Enregistré le : 03 févr. 2003 19:46
- Localisation : Berville-sur-Mer (27)
- Contact :
Re: factorielle
Faire une simple somme des logarithmes décimaux des facteurs ?
Commodore 7970 - Texas Instruments TI-30, 57, 60, 66, 74, 76.fr, 80, 81, 82, 82 Stats.fr, 83, 85, 86, 89, 92 - Casio PB-100, PB-110, PB-410, PB-500, PB-700, PB-770, FX-180Pv, FX-7500G, FC-200, FA-3, FA-4, FA-5, FA-10, FA-11, FA-20, FP-12, CM-1, OR-1, OR-1(E), OR-4, OR-8, RC-2, RC-4 - Canon X-07 - Psion Series 5 mx - PalmOne Tungsten E2 - Compaq iPAQ H3900 - HP iPAQ HX2110 - Philips VG8020, NMS8255, VY0010, VY0011, VS0080, D6450, VW0030, SBC3810, NMS1112, NMS1150, NMS1170 - Atari 1040 STE
- gege
- Fonctionne à 14400 bauds
- Messages : 7147
- Enregistré le : 31 janv. 2008 14:24
- Localisation : Banlieue Paârisienne
- Contact :
Re: factorielle
Bonjour,
Utilises la formule de Stirling.
G.E.
Utilises la formule de Stirling.
G.E.
- badaze
- Fonctionne à 14400 bauds
- Messages : 8402
- Enregistré le : 12 févr. 2007 18:36
- Localisation : Pas très loin de Lyon
- Contact :
Re: factorielle
Il en a même fait un livre.gege a écrit :Bonjour,
Utilises la formule de Stirling.
G.E.
Tout est bon dans le pocket.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.
Re: factorielle
Bonjour,
Je fais le programme sur le PC-1500 et le Commodore 128.
Sur le Sharp, les tableaux sont limités à 255 éléments. Chaque élément peut contenir un chiffre jusqu'à 7 positions (sinon, on se retrouve avec 1.123456E10), ce qui nous fait 1785 chiffres. Avec l'algorithme de la somme des LOG, j'ai trouvé, de manière empirique, que 733! fais 1784 positions.
Bon, je vous épargne les 1784 chiffres du résultat
La version C128 du programme. Les éléments du tableau ne peuvent dépasser 6 positions, mais le tableau peut être plus grand que 255 éléments
Ben
Je fais le programme sur le PC-1500 et le Commodore 128.
Sur le Sharp, les tableaux sont limités à 255 éléments. Chaque élément peut contenir un chiffre jusqu'à 7 positions (sinon, on se retrouve avec 1.123456E10), ce qui nous fait 1785 chiffres. Avec l'algorithme de la somme des LOG, j'ai trouvé, de manière empirique, que 733! fais 1784 positions.
Bon, je vous épargne les 1784 chiffres du résultat
Code : Tout sélectionner
10 FAST:SCNCLR
20 PRINT "CALCUL DE LA FACTORIELLE"
30 PRINT "------------------------"
40 DIM FA(500)
50 INPUT "NB=";NB
60 FA(1)=1:B=1:T=TI
70 FOR I=1 TO NB
80 J=0
90 J=J+1
100 RL=FA(J)*I+RT:IF RL>999999999 THEN PRINT I,B,RL:STOP
110 RT=INT(RL/1000000)
120 FA(J)=RL-1000000*RT
130 IF J=B AND RT<>0 THEN B=B+1
140 IF J<B THEN 90
150 NEXT I
155 T=(TIME-TI)/60
160 PRINT "FACTORIELLE DE";NB;"="
165 PRINT FA(B);
166 T=1
190 FOR I=B-1 TO 1 STEP -1
200 WN$=STR$(FA(I)):GOSUB 300:PRINT WN$;" ";
205 T=T+1:IF T>9 THEN PRINT:T=0
210 NEXT I
220 PRINT:PRINT "calcul en ";t; "sec"
230 print "nbr tableau=";b
240 print "nbr chiffre=";(b-1)*6+len(str$(fa(b)))-1
250 end
300 wn$=right$(wn$,len(wn$)-1)
310 if len(wn$)=6 then 399
320 for j=1 to 6-len(wn$)
330 wn$="0"+wn$
340 next j
399 return
Ben
- Hobiecat
- Fonctionne à 9600 bauds
- Messages : 3639
- Enregistré le : 06 sept. 2011 14:57
- Localisation : Normandie
Re: factorielle
badaze a écrit :Il en a même fait un livre.
- C.Ret
- Fonctionne à 9600 bauds
- Messages : 3419
- Enregistré le : 31 mai 2008 23:43
- Localisation : N 49°22 E 6°10
Re: factorielle
Je confirme, la factorielle de 733 se compose effectivement de 1784 chiffres.
J'ai vérifié moi aussi sur un Commodore C128D, mais avec un programme bien plus court, en tirant profit des boucles DO...LOOP que permet son Basic Microsoft v7.0
et en mémorisant la factorielle directement sous la forme d'une chaine de caractères.
Comme les registres ne peuvent contenir que 256 caractères, j'utilise implicitement un tableau F$(...)
J'ai vérifié moi aussi sur un Commodore C128D, mais avec un programme bien plus court, en tirant profit des boucles DO...LOOP que permet son Basic Microsoft v7.0
et en mémorisant la factorielle directement sous la forme d'une chaine de caractères.
Comme les registres ne peuvent contenir que 256 caractères, j'utilise implicitement un tableau F$(...)
Code : Tout sélectionner
10 fast:clr:c%=1:f$(0)="1":input "n ";n
20 do while n%<n:n%=n%+1:for f=0 to f%:for i=len(f$(f)) to 1 step -1:q%=r%+n%*val(mid$(f$(f),i,1)):r%=q%/10:q%=q%-10*r%:mid$(f$(f),i,1)=chr$(48+q%):next i,f
30 do while r%:q%=r%:r%=r%/10:q%=q%-10*r%:c%=c%+1:if len(f$(f%))>254then f%=f%+1
40 f$(f%)=chr$(48+q%)+f$(f%):loop:loop:print n%;"[←]!=";:for f=f% to 0 step -1:print f$(f);:next f:print ".(";c%;")":end
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Re: factorielle
Le calcul de la factorielle se fait de la ligne 70 à 150. Le reste, ce sont les stats, la présentation, ...
- badaze
- Fonctionne à 14400 bauds
- Messages : 8402
- Enregistré le : 12 févr. 2007 18:36
- Localisation : Pas très loin de Lyon
- Contact :
Re: factorielle
Quand on pense que le nombre d'atomes dans tout l'univers observable est estimé à 2x10^79 !!!C.Ret a écrit :Je confirme, la factorielle de 733 se compose effectivement de 1784 chiffres.
J'ai vérifié moi aussi sur un Commodore C128D, mais avec un programme bien plus court, en tirant profit des boucles DO...LOOP que permet son Basic Microsoft v7.0
et en mémorisant la factorielle directement sous la forme d'une chaine de caractères.
Comme les registres ne peuvent contenir que 256 caractères, j'utilise implicitement un tableau F$(...)
Code : Tout sélectionner
10 fast:clr:c%=1:f$(0)="1":input "n ";n 20 do while n%<n:n%=n%+1:for f=0 to f%:for i=len(f$(f)) to 1 step -1:q%=r%+n%*val(mid$(f$(f),i,1)):r%=q%/10:q%=q%-10*r%:mid$(f$(f),i,1)=chr$(48+q%):next i,f 30 do while r%:q%=r%:r%=r%/10:q%=q%-10*r%:c%=c%+1:if len(f$(f%))>254then f%=f%+1 40 f$(f%)=chr$(48+q%)+f$(f%):loop:loop:print n%;"[←]!=";:for f=f% to 0 step -1:print f$(f);:next f:print ".(";c%;")":end
Tout est bon dans le pocket.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.
- C.Ret
- Fonctionne à 9600 bauds
- Messages : 3419
- Enregistré le : 31 mai 2008 23:43
- Localisation : N 49°22 E 6°10
Re: factorielle
Très juste, et j'ai oublié de dire que mon programme très court est aussi très lent. Il est même bien trop lent et il lui faut plus de 4h pour déterminer les 1784 chiffres de 733!.Ben a écrit :Le calcul de la factorielle se fait de la ligne 70 à 150. Le reste, ce sont les stats, la présentation, ...
Voici une version plus rapide:
Code : Tout sélectionner
list
10 fast:clr:c%=1:dim f(399):f(0)=1:s$="":input "[wht]n [yel]";n%:ti$="000000":if n%>1 then begin:e%=9-log(n%)/log(10):e=int(10↑e%)
20 for n=2 to n%:r=0:for f=0 to f%:q=n*f(f)+r:r=int(q/e):f(f)=q-e*r:next f:if r then f%=f%+1:f(f%)=r
30 next n:c%=1+log(f(f%))/log(10)+e%*f%:bend
40 print n%;"[←]!=";:for f=f% to 0 step -1:color 5,4+(fand1):print right$(s$+mid$(str$(f(f)),2),e%);:s$="00000000":next f:print ".[wht](";c%;":";f%;")";ti$:getkey s$
ready.
Le calcul des chiffres de la factorielle à la ligne 20,
La détermination du nombre de chiffres à la ligne 30,
La mise en forme et l'affichage des résultats à la ligne 40.
Le GETKEY final permet de figer l'écran afin de capturer l'intégralité des informations qui y figure.
Le nombre de décimales mémorisées dans chaque registre F() est calculé au début du programme (variable E%).
Le nombre de décimales C% de la factorielle est obtenu à la fin de leur détermination à l'aide de E%, du nombre F% de registres F() utilisés et du nombre de chiffres contenu dans le dernier registre F(F%).
L'alternance des couleurs met en évidence la succession des registres F().
( 1784 : 297 )002511 signifie que la factorielle comporte 1784 chiffres, utilise 298 registres (de 0 à 297) et que la détermination a nécessité 00h 25min 11s.
badaze a écrit :Quand on pense que le nombre d'atomes dans tout l'univers observable est estimé à 2x10^79 !!!
Effectivement, mais il y a maintenant déjà un certain temps que je me prépare activement à observer l'invisible et l'incommensurable.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Re: factorielle
J'ai calculé 733! sur le Sharp, le pauvre. Il a tout de même mis 3h48
- leglatin
- Fonctionne à 1200 bauds
- Messages : 761
- Enregistré le : 03 févr. 2003 19:46
- Localisation : Berville-sur-Mer (27)
- Contact :
Re: factorielle
Voici ma version pour TI-57 : avec ce programme, elle peut calculer la factorielle d'un entier naturel compris entre 1 et 54 inclus, avec tous ses chiffres.
Pour obtenir les chiffres de n!, saisir RST, n, R/S. A l'issue du calcul, les chiffres de n! sont stockés en mémoire tel que :
n!=[RCL7]*10^54+[RCL6]*10^45+[RCL5]*10^36+[RCL4]*10^27+[RCL3]*10^18+[RCL2]*10^9+[RCL1]
Dans le cas où le calcul s'achève avec l'affichage de 0 en notation scientifique ( "0 00" ), multiplier le tout par 10^9.
Exemple : 54!. On obtient à l'issue du calcul l'affichage "0 00" et en mémoire :
RCL7 = 230843697
RCL6 = 339241380
RCL5 = 472092742
RCL4 = 683027581
RCL3 = 083278564
RCL2 = 571807941
RCL1 = 132288000
d'où 54! = 230843697339241380472092742683027581083278564571807941132288000000000000
© C. Le Glatin, 1992.
PS : Le pas 03 se programme par programmation synthétique ; si vous ne savez faire, pas grave : enlever les pas 00 à 02 du programme et saisissez manuellement RST, INV C.t, n, R/S pour lancer le calcul.
Pour obtenir les chiffres de n!, saisir RST, n, R/S. A l'issue du calcul, les chiffres de n! sont stockés en mémoire tel que :
n!=[RCL7]*10^54+[RCL6]*10^45+[RCL5]*10^36+[RCL4]*10^27+[RCL3]*10^18+[RCL2]*10^9+[RCL1]
Dans le cas où le calcul s'achève avec l'affichage de 0 en notation scientifique ( "0 00" ), multiplier le tout par 10^9.
Exemple : 54!. On obtient à l'issue du calcul l'affichage "0 00" et en mémoire :
RCL7 = 230843697
RCL6 = 339241380
RCL5 = 472092742
RCL4 = 683027581
RCL3 = 083278564
RCL2 = 571807941
RCL1 = 132288000
d'où 54! = 230843697339241380472092742683027581083278564571807941132288000000000000
© C. Le Glatin, 1992.
PS : Le pas 03 se programme par programmation synthétique ; si vous ne savez faire, pas grave : enlever les pas 00 à 02 du programme et saisissez manuellement RST, INV C.t, n, R/S pour lancer le calcul.
Commodore 7970 - Texas Instruments TI-30, 57, 60, 66, 74, 76.fr, 80, 81, 82, 82 Stats.fr, 83, 85, 86, 89, 92 - Casio PB-100, PB-110, PB-410, PB-500, PB-700, PB-770, FX-180Pv, FX-7500G, FC-200, FA-3, FA-4, FA-5, FA-10, FA-11, FA-20, FP-12, CM-1, OR-1, OR-1(E), OR-4, OR-8, RC-2, RC-4 - Canon X-07 - Psion Series 5 mx - PalmOne Tungsten E2 - Compaq iPAQ H3900 - HP iPAQ HX2110 - Philips VG8020, NMS8255, VY0010, VY0011, VS0080, D6450, VW0030, SBC3810, NMS1112, NMS1150, NMS1170 - Atari 1040 STE
- badaze
- Fonctionne à 14400 bauds
- Messages : 8402
- Enregistré le : 12 févr. 2007 18:36
- Localisation : Pas très loin de Lyon
- Contact :
Re: factorielle
Un mot. Bravo !!!
Je n'aurais jamais pensé que ce soit possible.
Je n'aurais jamais pensé que ce soit possible.
Tout est bon dans le pocket.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.
Re: factorielle
Bravo! Mon programme met plus du double, un peu moins d'une heure pour faire le calculC.Ret a écrit :la détermination a nécessité 00h 25min 11s.