Misez p'tit Optimisez n°58 : somme des cubes des chiffres

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

Répondre
Avatar du membre
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7141
Enregistré le : 31 janv. 2008 14:24
Localisation : Banlieue Paârisienne
Contact :

Misez p'tit Optimisez n°58 : somme des cubes des chiffres

Message par gege »

Bonjour,
Voici un petit MPO de rentrée :

"Trouver les nombres entiers égaux à la somme des cubes de leurs chiffres"

Pour faciliter la tâche, sachez qu'on peut montrer qu'aucun nombre supérieur à 3000 ne convient (en fait aucun tel nombre n'est supérieur à 1000...).
Je trouve 5 nombres (dont 1 ;-) ), à vous de jouer !

Après, on peut imaginer itérer le calcul (nombre -> somme des cubes de ses chiffres), et regarder si ça converge, si ça fait des boucles...
Je proposerai un article sur ce thème pour la Gazette.

A vos machines !
G.E.
Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2919
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Misez p'tit Optimisez n°58 : somme des cubes des chiffre

Message par zpalm »

gege a écrit :Je proposerai un article sur ce thème pour la Gazette.
Voilà qui va faire plaisir au red'chef :wink:
Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2919
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Misez p'tit Optimisez n°58 : somme des cubes des chiffre

Message par zpalm »

Sur WP 34S:

Code : Tout sélectionner

001 LBL A
002 0
003 RCL Y
004 SDR 001
005 FP
006 RCL L
007 IP
008 RDN
009 SDL 001
010 x^3
011 +
012 RCL Z
013 x#0?
014 BACK 010
015 x<> Z
016 x=? Y
017 STOP
018 INC X
019 EEX
020 3
021 x<> Y
022 x#? Y
023 GTO A
024 RTN
Entrer le nombre de départ puis appuyer sur [A], par exemple: 1 [A]

Le programme s'arrête à chaque nombre trouvé, on relance par [R/S].
Le programme s'arrête lorsqu'il atteint 1000.

J'ai aussi trouvé 5 nombres à partir de 1 (sans compter 0).
Modifié en dernier par zpalm le 30 août 2014 21:44, modifié 1 fois.
Avatar du membre
babaorhum
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 454
Enregistré le : 13 janv. 2013 19:44
Localisation : Marseille-est

Re: Misez p'tit Optimisez n°58 : somme des cubes des chiffre

Message par babaorhum »

Chouette la rentrée, un MPO !
Merci Gege

donc en sharp-basic "bête", sans algorithme astucieux qui pourrait faire gagner beaucoup beaucoup de temps ...

Code : Tout sélectionner

10 WAIT 0:FOR N=1 TO 1000:V=0
20 A$=STR$ N:FOR I=1 TO LEN A$:V=V+VAL MID$(A$,I,1)^3:NEXT I
30 IF V=N THEN PRINT N
40 NEXT N
a priori on peut arrêter la boucle à 500 non ?

A optimiser maintenant ...
Modifié en dernier par babaorhum le 30 août 2014 15:20, modifié 1 fois.
BaBaoRhum
HP J728,200LX,1000CX,75C,71B,48GX,42s,41CX,32E,32Sii,28S,22s,21,16C,11C
Sharp PC- E500,1600,1500,1350,1261,1245
Casio FX-502P,602p,850P,3900P,4000P
TI-74,92,95 ; Canon X-07 ; TANDY EC-4026 ; Wp34S
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2142
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Misez p'tit Optimisez n°58 : somme des cubes des chiffre

Message par cgh »

Un autre moyen, faire 3 boucles, 1 pour les unites, 1 pour les dizaines et 1 pour les centaines, mais dans ce cas ne doit verra pas 1000.

Code : Tout sélectionner

10 FOR C=0 TO 9
20 FOR D=0 TO 9
30 FOR U=0 TO 9
40 T=C*100+D*10+U
50 Z=C*C*C+D*D*D+U*U*U
60 IF T=Z THEN PRINT "Nombre: ";T
70 NEXT U
80 NEXT D
90 NEXT C
J'utilise x*x*x au lieu de x^3 car certaines machines BASIC ont une facheuse tendance a faire des erreurs de calcul sur les puissances (Oui, oui: essayez 96^2 sur un PC-1500 ou PC-1251 de premiere generation... etonnant 8O )
Ensuite, je me souviens que les multiplications sont souvent plus rapides que les puissances. De meme, comme on ne manipule que des entiers, certains BASIC possedent des variables ENTIERES (% je crois) et dans ce cas pas de INT ou FRAC (enfin sur les SHARP...)

Merci gege pour ce devoir de rentree.

PS: J'ai tape le programme directement dans le fil. Je ne l'ai pas teste !
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2142
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Misez p'tit Optimisez n°58 : somme des cubes des chiffre

Message par cgh »

Ca fonctionne en C (par consequent aussi sur PB2000C).

Code : Tout sélectionner

#include <stdio.h>

int main( int argc, char **argv )
{
  int c,d,u,t;

  for( c = 0; c < 10; c++ )
    for( d = 0; d < 10; d++ )
      for( u = 0; u < 10; u++ )
        if( (t = (u*u*u+d*d*d+c*c*c)) == (c*100+d*10+u) )
          printf( "Trouve: %d\n", t );

  return( 0 );
}
Cela me donne 5 nombres et 0.
Modifié en dernier par cgh le 30 août 2014 19:12, modifié 1 fois.
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6172
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Misez p'tit Optimisez n°58 : somme des cubes des chiffre

Message par Marge »

Un MPO, bonne idée, ça manquait.
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Avatar du membre
babaorhum
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 454
Enregistré le : 13 janv. 2013 19:44
Localisation : Marseille-est

Re: Misez p'tit Optimisez n°58 : somme des cubes des chiffre

Message par babaorhum »

pas mal pas mal ...
EDIT : euh j'avais dit une bétise ... je retire ...
la version cgh est beaucoup plus rapide que la mienne, a creuser peut être !
pour donner un ordre de grandeur, mon PC-E500 trouves les 6 chiffres en 15s (on compte le 0) et balaye les 1000 en 36s avec l'algo de cgh.
Vous êtes à quels temps ?
BaBaoRhum
HP J728,200LX,1000CX,75C,71B,48GX,42s,41CX,32E,32Sii,28S,22s,21,16C,11C
Sharp PC- E500,1600,1500,1350,1261,1245
Casio FX-502P,602p,850P,3900P,4000P
TI-74,92,95 ; Canon X-07 ; TANDY EC-4026 ; Wp34S
Avatar du membre
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7141
Enregistré le : 31 janv. 2008 14:24
Localisation : Banlieue Paârisienne
Contact :

Re: Misez p'tit Optimisez n°58 : somme des cubes des chiffre

Message par gege »

Bonjour,
1 minute 46 sur PB-700 avec optimisations.... :? (2 minutes 12 sans)
Bon, il faut tenir compte du matériel.
Oulà le programme WP34S semble compliqué... je vais le taper.
G.E.

Edit : correction des temps
Modifié en dernier par gege le 30 août 2014 19:36, modifié 1 fois.
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2142
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Misez p'tit Optimisez n°58 : somme des cubes des chiffre

Message par cgh »

Comme mon algo n'utilise que des entiers, il faudra que j'ecrive le programme en assembleur pour PC-1500...
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque
Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2919
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Misez p'tit Optimisez n°58 : somme des cubes des chiffre

Message par zpalm »

gege a écrit :Oulà le programme WP34S semble compliqué... je vais le taper.
G.E.
C'est un premier jet où tout se fait dans la pile. Il y a sûrement plus optimisé...
Avatar du membre
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7141
Enregistré le : 31 janv. 2008 14:24
Localisation : Banlieue Paârisienne
Contact :

Re: Misez p'tit Optimisez n°58 : somme des cubes des chiffre

Message par gege »

Oui, j'ai fini par comprendre.
Quels temps pour tous ces beaux programmes ?
G.E.
Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2919
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Misez p'tit Optimisez n°58 : somme des cubes des chiffre

Message par zpalm »

Mon programme WP 34S trouve les 5 nombres en 7 secondes et balaye tous les nombres jusqu'à 1000 en 16 secondes.
Il pourrait aller plus vite mais j'ai du mettre ma 34S en mode SLOW car les piles sont basses et en mode FAST la machine se met en veille avant la fin du programme ( le CPU tire trop de courant et les pauvres CR 2032 ne peuvent pas suivre).
Avatar du membre
babaorhum
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 454
Enregistré le : 13 janv. 2013 19:44
Localisation : Marseille-est

Re: Misez p'tit Optimisez n°58 : somme des cubes des chiffre

Message par babaorhum »

j'arrive pas a bien comprendre le RPN du WP34S mais c'est redoutablement efficace ...
on a pas encore de version RPL ? (pas mon truc le RPL)
En attendant j'ai fais tourner le basic-cgh sur mon Panasonic HHC de 1983 qui trouve fièrement les 6 valeurs en 12s et balaye les 1000 en 16,5s ... pas mal le papi-pocket !
BaBaoRhum
HP J728,200LX,1000CX,75C,71B,48GX,42s,41CX,32E,32Sii,28S,22s,21,16C,11C
Sharp PC- E500,1600,1500,1350,1261,1245
Casio FX-502P,602p,850P,3900P,4000P
TI-74,92,95 ; Canon X-07 ; TANDY EC-4026 ; Wp34S
Keeper
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 237
Enregistré le : 20 juil. 2014 20:01
Localisation : 71

Re: Misez p'tit Optimisez n°58 : somme des cubes des chiffre

Message par Keeper »

Hello :D
1 min 30 sur ma fx-8500G avec le code suivant (qui peut peut-être être optimisé en utilisant la fonction Isz, j'ai pas testé)

Code : Tout sélectionner

Mcl
Lbl 1
C*100+D*10+U->N
C^3+D^3+U^3->S
N=S=>N◄
U=9=>Goto 2:U+1->U:Goto 1
Lbl 2
0->U
D=9=>Goto 3:D+1->D:Goto 1
Lbl 3
0->D
C=9=>Goto 4:C+1->C:Goto 1
Lbl 4
Répondre

Retourner vers « Tous les Pockets »