Quelle TI-92 ?

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3419
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Message par C.Ret »

Sur une HP 28S:

La limite semble être 253! ~ 5.17346099264x10^499

Mais Bof c'est pas très prècis. 11 chiffres sur plus de cinq cents !

La limite de la factorielle non arrondie serait plutôt 17!

Code : Tout sélectionner

18 FACT retourne 6.40237370573E15 
soit        18!~= 6402373705730000
 au lieu de 18! = 6402373705728000.

Alors que 17! est encore juste:
17 FACT retourne 3.55687428096E14
soit       17! =  355687428096000. Ce qui est correct
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.
Avatar du membre
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7147
Enregistré le : 31 janv. 2008 14:24
Localisation : Banlieue Paârisienne
Contact :

Message par gege »

Tiens tiens, une question facile en passant :
Combien y a-t-il de zéros à la fin de N!, en fonction de N ??

G.E.
Avatar du membre
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 8402
Enregistré le : 12 févr. 2007 18:36
Localisation : Pas très loin de Lyon
Contact :

Message par badaze »

gege a écrit :Tiens tiens, une question facile en passant :
Combien y a-t-il de zéros à la fin de N!, en fonction de N ??

G.E.
A l'arrache, je dirais que ça dépend du nombre de dizaines, de cinq et de deux dans la série.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3419
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Message par C.Ret »

Oui, je suis assez d'accord avec badaze

Code : Tout sélectionner

On aurait donc par exemple :
         16     8     3     2
18! = (2)  x (3) x (5) x (7) x (11) x (13) x (17)

On aurait donc trois zéro à la fin de la factorielle (2x5)^3

Effectivement
18!= 6402373705728000.
Autre exemple :

Code : Tout sélectionner

            439     219     109     73      43      36      27      24      19
446 !=   (2)    x(3)    x(5)    x(7)   x(11)   x(13)   x(17)   x(19)   x(23)

             15      14      12      10      10      9      8      7      7
        x(29)   x(31)   x(37)   x(41)   x(43)   x(47)  x(53)  x(59)  x(61)

             6      6      6      5      5      5      4       4       4
        x(67)  x(71)  x(73)  x(79)  x(83)  x(89)  x(97)  x(101)  x(103)

              4       4       3       3       3       3       3       2
        x(107)  x(109)  x(113)  x(127)  x(131)  x(137)  x(139)  x(149)

              2       2       2       2       2       2       2       2
        x(151)  x(157)  x(163)  x(167)  x(173)  x(179)  x(181)  x(191)

              2       2       2       2       2
        x(193)  x(197)  x(199)  x(211)  x(223)  x(227) x(229) x(233) x(239)

        x(241) x(251) x(257) x(263) x(269) x(271) x(277) x(281) x(283) x(293)

        x(307) x(311) x(313) x(317) x(331) x(337) x(347) x(349) x(353) x(359)

        x(367) x(373) x(379) x(383) x(389) x(397) x(401) x(409) x(419) x(421)

        x(431) x(433) x(439) x(443)

D’où il y aurait 109 zéros.

En effet :

446 !=            4283971436 4144769709 4888339041 9825601892 8072616643 6438114770 5076466075 4197098309 3287381334 
       8388051689 3204244433 2932245583 8219379072 6147319869 9312397610 6838522655 3462941901 7771635807 0882500670 
       8769958472 7351250796 7563220787 3900394968 3837871660 1260411824 2615713122 1052911068 5959660718 8718124417 
       6581238677 3119910280 3453161696 6662149904 0326392932 8499407878 1914445491 1314473282 2180185474 7832007793 
       3854461684 1293739454 0074608499 0618420002 5575282023 7505133309 4321813140 3029805868 2080664731 6028198200 
       1299509774 9902325658 1035526290 0523468972 1466349305 8088186593 7050600147 3309613499 3800646323 6486891403 
       6344501011 6039490364 1225520587 3602810142 2170854033 3794783727 6470797822 1090361481 3643509688 2053331293 
       9915622456 2913763043 6663871348 4317012776 9756886386 8628939241 4920363076 9174196532 0086701807 1736450617 
       9044087513 8915632514 6140040284 4757791570 2642125211 9746076283 9097041356 3987192484 5932026265 6000000000 
       0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000.

Il y a donc bien 990 chiffres et 109 zéros à droite.
Maintenant si quelqu’un a une formulation litterale du style d=f( n ) qui donne le nombre d de zéros à la fin de n !
Nous sommes preneurs.
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.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3419
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Message par C.Ret »

Tiens tien,

Code : Tout sélectionner

18 / 5 = 3 * 5 + .6 ---> 3 zeros à la fin de 18!

253 = 50 * 5 + .6
 50 =  10 * 5
 10 = 2*5          -----> 50+10+2=62 zéro à la fin de 253!

446 = 89 * 5 + .6
 89 = 17 * 5 + .8
 17 =  3 * 5 + .4 ---- 89+17+3 = 109 zéros
Qu'est-ce à quo ?
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.
Avatar du membre
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4412
Enregistré le : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Message par charognard »

et c'est reparti ....


je commence, j'ai un visual studio sous la main ... code HP à venir (ce soir)

Code : Tout sélectionner

    Function zerofact(ByVal n As Integer)
        Dim r As Integer
        Do While n
            n = Int(n / 5)
            r += n
        Loop
        Return r
    End Function
je ne doute pas que l'on puisse faire mieux :wink:
Modifié en dernier par charognard le 23 sept. 2008 15:55, modifié 1 fois.
Avatar du membre
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4412
Enregistré le : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Message par charognard »

en récursivité

Code : Tout sélectionner

    Function zerofact(ByVal n As Integer)
        If Int(n) = 0 Then
            Return 0
        Else
            Return Int(n / 5) + zerofact(Int(n / 5))
        End If
    End Function
jxano
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2362
Enregistré le : 16 févr. 2008 23:34
Localisation : Paris 20ème

Message par jxano »

charognard a écrit :en récursivité

Code : Tout sélectionner

    Function zerofact(ByVal n As Integer)
        If Int(n) = 0 Then
            Return 0
        Else
            Return Int(n / 5) + zerofact(Int(n / 5))
        End If
    End Function
Ou bien : somme des int(n/5^p) pour tout p entier strictement positif tel que 5^p <= n. Il faut comprendre qu'il y a 25=5², 125=5³, etc.
Programmeur abscons.
jxano
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2362
Enregistré le : 16 févr. 2008 23:34
Localisation : Paris 20ème

Message par jxano »

Code pour Sharp PC-1403 :

Code : Tout sélectionner

10:INPUT "NOMBRE ";N:P=1,R=0
20:IF (5^P)<=N LET R=R+ INT (N/(5^P)),P=P+1:GOTO 20
30:PRINT "NOMBRE DE ZEROS : ";R:END
Programmeur abscons.
Avatar du membre
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7147
Enregistré le : 31 janv. 2008 14:24
Localisation : Banlieue Paârisienne
Contact :

Message par gege »

A mon avis il faut compter combien de fois les nombres de 1 à N sont divisibles par 5.
Or pour avoir un 5 comme diviseur il faut...
Pour en avoir 2 exactement (et pas 1) il faut...
3 ...
...

;-)


G.E.
Avatar du membre
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4412
Enregistré le : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Message par charognard »

gege a écrit :A mon avis il faut compter combien de fois les nombres de 1 à N sont divisibles par 5.
Or pour avoir un 5 comme diviseur il faut...
Pour en avoir 2 exactement (et pas 1) il faut...
3 ...
...

;-)


G.E.
j'ai rien compris :cry:
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3419
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Message par C.Ret »

Pas mal !

Pour HP28S (bien d'autre du même type).

Code : Tout sélectionner

« 0
  DO
       SWAP 5 / IP SWAP OVER +
  UNTIL OVER 
  END 
  SWAP ROP
»
'nZFACT' STO
Bon d'accord badaze va trouver cela compliqué.



On peut faire récurssif (et plus court):

Code : Tout sélectionner

« IP                                             % arrondi à l'entier inférieur
   IF DUP                                      %  Test implicitement n=0
   THEN DUP 5 / nZFACT +             % divise par cinq et appel récursif
   ELSE 0                                      % retourne 0 si n=0
   END
»
'nZFACT' STOP
Utilisation
n nZFACT retourne n au niveau 2: et le nombre de zéro à la fin de n! sur le niveau 1:


Mais le vrai challange c'est de calculer les factorielles avec tous les chiffres sans utiliser les objet entiers long du HP-49 !

Par exemple on peut (théoriquement) calculer tous les chiffres de 443! sur un SHARP PC-1211 avec la programme suivant :

Code : Tout sélectionner

  1 :CLEAR :C=|E10 :B=9 :A(B)=1 :F=1
  2 :"N" INPUT " N = " ;G :IF G<>F GOTO 6
  3 :"=" BEEP 1 :FOR E=B TO 9STEP -1:A=E-8
  4 :PRINT USING "####";F;"!=";A;">";USING "###########";A(E);" <" :NEXT E :GOTO 2
  5 :"F" AREAD G :IF G=F GOTO 3
  6 :IF G<F GOTO 11
  7 :FOR D=F+1 TO G : H=0 :E=8
  8 :E=E+1 :A=H :H=INT((DA(E)+H)/C) :A(E)=DA(E)+A-CH :IF E<B GOTO 8
  9 :IF H LET B=B+1, A(B)=H
 10 :PAUSE D,G :NEXT D :F=G :GOTO 3
MEM
1170STEPS 146MEMORIES
Utilisation :
Comme le calcul est long, surtout sur ce pocket, et comme les chiffres sont en mémoire, la dernière factorielle calculée est mémorisée afin de ne pas reprendre la calcul des n*(n+1) depuis de début. Il faut évidemment demander le calcul avec des n croissants sinon une erreur se produit à la ligne 6 : 2............

Initialiser la première fois en tapant RUN (cela remet à zéro la mémoire initialisée avec 1!=1)
A l'invite " N = ?" entrer n.
N peut aussi être entrer en mode DEF avec le raccourci [ SHIF ][ F ] et une fonction AREAD prend le n à l'affichage.
Le SHARP effectue ensuite les calculs (d'autant plus long que n est grand)
Pour faire patienter, la progression est affichée à chaque calcul d'une factorielle.
La fin du calcul est indiquée par un BEEP t le résultat s'affiche.

Le résultat est affiché par paquet de 10 chiffres en commençant par ceux de poids les plus élevés. L'indice est rapellé pour faciliter la transcription.
Le résultat peut être ré-affiché à volonté par le raccourci [ SHIFT][ =]

Exemple :

Code : Tout sélectionner

RUN
 N = 5 [ENTER]
           2            5
           3            5
           4            5
           5            5
{bip}
   5!=   1>        120 < 
[SHIFT][ N ]
 N = 18 [ENTER]
           6           18
           7           18
{. . .}
          18           18
{bip}
  18!=   2>     640237 < 
  18!=   1> 3705728000 <    qui se lit 18 ! = 640237 3705728000.

Il reste plus de 146 MEMORIES, donc on peut en théorie calculer des factorielles jusqu’à 1610 chiffres.
En théorie, car le temps de calcul croît de façon exponentielle avec n.

J’attends toujours le résultat 443 ! lancé depuis le début de cette après-midi !
Modifié en dernier par C.Ret le 23 sept. 2008 18:50, modifié 3 fois.
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.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3419
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Message par C.Ret »

jxano a écrit :Code pour Sharp PC-1403 :

Code : Tout sélectionner

10:INPUT "NOMBRE ";N:P=1,R=0
20:IF (5^P)<=N LET R=R+ INT (N/(5^P)),P=P+1:GOTO 20
30:PRINT "NOMBRE DE ZEROS : ";R:END
Alternativement, sachant que le nombre de fois que n est divisible par 5 est donné par le logarithme de base 5 (que j’obtient par le rapport log(n)/log(5) :

Code : Tout sélectionner

 10 : "Z" AREAD N: Z=0:FOR I=1 TO LOG N/LOG 5:N=INT .2N:Z=Z+N:NEXT I
 20 : PRINT " NOMBRE DE ZEROS : ";Z
Soit éventuellement avec un SHARP qui se respecte (cf; charognard) (et donc qui ne supporte pas la multiplication implicite).

Code : Tout sélectionner

 10 :INPUT " N =";N:Z=0:FOR I=1 TO LOG N/LOG 5:N=INT (N/5):Z=Z+N:NEXT I
 20 :PRINT " NOMBRE DE ZEROS : ";Z
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.
jxano
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2362
Enregistré le : 16 févr. 2008 23:34
Localisation : Paris 20ème

Message par jxano »

C.Ret a écrit :Alternativement, sachant que le nombre de fois que n est divisible par 5 est donné par le logarithme de base 5 (que j’obtient par le rapport log(n)/log(5) :
Ah bon ?

Ça ne donnerait pas plutôt le nombre de chiffres avec lequel on peut écrire n en base 5 ? (Par exemple, ln17/ln5 donne un truc entre 1 et 2... mais 17 n'est pas divisible par 5 !)

Ou alors tu parles de la factorielle... J'avoue que je me perds un peu dans tes explications.
Programmeur abscons.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3419
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Message par C.Ret »

Oui efficivement ma formulation est maladroite. Le log ne donne pas en effet le multiple, mais le nombre de fois que l'on peut multiplier par la base.

Par exemple, (en log décimal car plus facile à écrire).

log 100 = 2 car 100 = 10 x 10 x 1 = 10^2 x 1 avec 1=alog 0=10^0

log 101 = 2.004321... soit 101 = 10^2 x r avec r = alog 0.004321... soit r=1.01000...

log 102 = 2.00860... soit 102 = 10^2 x r avec r = alog 0.00860... soit r=1.0200...

On aura toujours 1 <= r < 10 donc le log10(n) donne bien le nombre de fois que 10 est multiple du nombre n

De même pour log5(n), donnera le nombre de fois que n est multiple
n=5^y x r avec y=log5(n) et 1 <= r <5

Par exemple: log5(17)=1.6826... soit 17= 5^1 x r avec r= 3.4 donc r < 5. Le log donne le degré de multiplicité.

Le log5 donne donc le nombre de fois où 5 est diviseur entier de 17, la partie décimale du log5 correspond justement à la partie fractionaire du multiple :

5^1.6826... = 5^1 x 5^.686... = 5 x 3.4 ~= 17

En base binaire, c'est identique mais avec 1 <= r < 2
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.
Répondre

Retourner vers « Tous les Pockets »