Page 1 of 1

diviseur de nombre...

Unread postPosted: 01 Oct 2012, 21:33
by nikitouzz
voila j'ai fait un algo qui permet de trouver tout les diviseur commun d'un nombre j'aimerai savoir si il y a plus optimiser e mien fait 328octet... c'est peut etre un peu beaucoup... si vous avez des suggestions sa serait simpas merci :)



(je ne peut pas mettre mon code pour le moment )

Re: diviseur de nombre...

Unread postPosted: 02 Oct 2012, 10:51
by Bisam
Je n'ai pas programmé sur z80 depuis longtemps, mais on doit pouvoir faire comme ça :
Code: Select all
Prompt N
1->L1(1
For(i,2,N
If not(mod(N,i
i->L1(1+dim(L1
End
Disp L1


Je pense que le code ci-dessus fait moins de 100 octets.

Re: diviseur de nombre...

Unread postPosted: 02 Oct 2012, 10:54
by Adriweb
Si mes souvenirs sont bons, ya une fonction directmenet pour ajouter un élément à une liste non ? :D
( au lieu de i->L1(1+dim(L1 ) (genre augment( ?)

Re: diviseur de nombre...

Unread postPosted: 02 Oct 2012, 10:57
by Bisam
C'est vrai sur 68k mais je ne suis pas sûr sur z80.
Et puis de toute façon, c'est tout aussi long :
Code: Select all
augment(L1,{i->L1

Re: diviseur de nombre...

Unread postPosted: 02 Oct 2012, 16:26
by nikitouzz
petite precision ^^ justement je suis obliger d'utiliser la fonctions ipart et enfaite je recherche un code qui ne fait pas tout les nombre entre 2 et N car pour des nombres de plus de 1000 c'est lent...

Re: diviseur de nombre...

Unread postPosted: 02 Oct 2012, 18:24
by Lionel Debroux
C'est typiquement le genre de choses qu'il vaut beaucoup mieux faire en code natif qu'en langage de plus haut niveau - surtout avec le lent BASIC de TI ;)

Re: diviseur de nombre...

Unread postPosted: 02 Oct 2012, 20:11
by nikitouzz
oui je sais le faire en axe, cependant on me le demande en TI-Basic ^^

Re: diviseur de nombre...

Unread postPosted: 03 Oct 2012, 10:24
by Bisam
Si tu ne veux pas faire tous les nombres de 2 à N, il faut t'arrêter à la racine carrée de N...
Comme tu parlais d'optimisation en espace, je n'ai pas cherché à optimiser en temps d'exécution !!
Voici une nouvelle version :
Code: Select all
Prompt N
ipart(sqrt(N->P
1->L1(1
N->L2(1
1->K
For(i,2,P
If N=i*ipart(N/i
Then
K+1->K
i->L1(K
N/i->L2(K
End
P^2=N->A
For(i,1,K-A
L2(K-i+not(A->L1(K+i
End
Disp L1

Re: diviseur de nombre...

Unread postPosted: 03 Oct 2012, 12:45
by nikitouzz
merci beaucoup sa marche :)

c'est a peu pres le code que j'avais :)

Re: diviseur de nombre...

Unread postPosted: 06 Oct 2012, 18:04
by Hayleia
nikitouzz wrote:les diviseur commun d'un nombre

C'est quoi les diviseurs communs d'un seul nombre ? :P
Les diviseurs communs de deux nombres je connais mais pas les diviseurs communs d'un seul :P

Bref, plus sérieusement, si tu veux gagner un peu de vitesse d'exécution, tu peux aussi tester avant la boucle si le nombre est pair et s'il est impair, la boucle n'a plus qu'à tester les nombres impairs donc tu peux la faire aller deux fois plus vite ;)