Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.
Spé Maths: décomposition en facteurs premiers
Métalocif le 09/10/2011 à 13:17
Un programme pratique et rapide pour les Terminales S.
Voila le code:
Code
ClrHome
Input"Votre Nombre?",X
2->Y
While 1
If X/Y=iPart(X/Y)
Then
If Y=2 or Y=3 or Y=5 or Y=7 or Y=11 or Y=13 or Y=17 or Y=19 or Y=23 or Y=27 or Y=29 or Y=31 or Y=37 or Y=41
Then
Disp Y
X/Y->X
Pause
End
Else
Y+1->Y
End
If Y>41 or Y=1
Then
If X[différent de]1
Disp X
Output(1,1,""
Stop
End
End
Voilà! Je l'ai mis dans une compilation de programmes de maths donc je ne sais pas quel est son poids,mais il n'est pas bien lourd...
Il peut sans doute être amélioré,donc n'hésitez pas à me faire part de vos idées.
Métalocif
azerty1 le 09/10/2011 à 13:30
Sympa

J'en avais fait un aussi, mais pas de la même manière, regarde
ce topic, on en avait discuté, mais ta méthode est intéressante aussi

sandro le 09/10/2011 à 17:47
ça à l'air pas mal mis à part que ça ne prend pas vraiment en compte es nombres premiers suppérieurs à 41.
Sandroazerty1 le 09/10/2011 à 18:15
Oui, c'est l'inconvénient pour les grands nombres... C'est pour ça, la méthode utilisées dans l'autre topic, est je pense, plus efficace...sandro le 09/10/2011 à 18:21
Oui, ou alors il faut prolonger la liste des nombres premiers.
Sandro
PS : si certains voudrait bien aller sur [url=espace TI]http://espace-ti.forumactif.com/[/url], on essaye de battre le record de personnes sur le forum (invités et membres confondus)Métalocif le 10/10/2011 à 12:28
Ouais,mais comme le programme décompose le nombre en partant des plus petits nombres premiers,le temps qu'il arrive jusqu'à 41, le seul facteur premier restant est affiché par le programme puisque c'est le dividende!
En plus cette méthode rend le programme très rapide.
MétalocifPersalteas le 10/10/2011 à 13:40
41 c'est le max ... qu'est-ce qui pourrait atteindre ou dépasser "le" 42...

sandro le 10/10/2011 à 18:34
C'zte vrai que la plupart du temps la méthode est efficace, sauf si l'on a deux facteurs premiers suppérieurs à 41.
Sandrotonio 2 le 01/11/2011 à 23:45
Sinon j'ai crée un autre programme qui donne rigouresement pour chaque nombre ( sauf 1 mais venez pas m'embetter avec ca svp :p ) dont les facteurs ne sont pas trop grand ( sinon problème de mémoire

) chacun de ses facteurs
Code
EffEcr
EffListe L1
Input "NBR A FACTORISER",N
2->A
0->F
Lbl 1
If partDec (N/A)=0
Then
F+1->F
A->L1(F
N/A->N
If N=1
Goto 2
Goto 1
Else
A+1->A
Goto 1
End
Lbl 2
If F=1
Then
Disp "PREMIER"
Else
Disp L2
End
bon fait à l'arrache avant d'aller me coucher si on peut optimiser, dites le

The K le 02/11/2011 à 10:25
Huhu sinon ... il y a moyen de raccourcir encore ...
Ce programme n'est pas de moi (source :
http://www.siteduzero.com/tuto[...]composeur.html, tutoriel de mdr1 sur le ti-basic ), mais il marche parfaitement
Code
:{1→L1
:1→C
:Input "dec ",A
:For(B,2,√(A
:While not(fPart(A/B
:B→L1(C
:C+1→C
:A/B→A
:End
:End
:If A≠1:A→L1(C
:L1
sandro le 02/11/2011 à 19:27
on peut même l'améliorer encore un petit peu (en tout cas en place, peut-être pas en vitesse) :
Code
:{1 -> L1
:1 -> C
:Input "dec ",A
:For(B,2,rac(A
:While not(fPart(B[^-1]A
:B -> L1(dim(L1
:B[^-1]A -> A
:End
:End
:If A-1
:A -> L1(dim(L1
:L1
Sandro
The K le 02/11/2011 à 19:31
Ouais ... Mouais ... Tu chipotes un peu la

Et puis même t'es sur d'économiser au moins seul octet ?

sandro le 02/11/2011 à 19:36
pardon, j'avais simplement ... oublié l'optimisation (j'avais juste remplacé les carractères spéciaux : maintenant c'est 4 octés en moins)
J'ai édité
SandroThe K le 02/11/2011 à 20:04
Va pour 4 octets en moins
(tu m'impressionnes la quand même t'sais

)
tonio 2 le 03/11/2011 à 08:57
J'aime bien ton optimisation sandro mais je sais pas pk la calto aime moins ( surtout le A[
^-1]
Voila la version finale que j'en ai retenu, un peu plus lourde mais beaucoup plus rapide pour certains nombres
Code
:EffListe L1
:EffEcr
:1 -> C
:Input "dec ",A
:For(B,2,rac(A
:While not(fPart(A/B
:B -> L1(C
:A/B->A
:C+1->C
:If A=1:Goto 1 // gain de vitesse si A=1 avant B=racine de A
:End
:End
:If A-1
:A -> L1(C
:Lbl 1 // gain de vitesse si A=1 avant B=racine de A
:L1
The K le 03/11/2011 à 18:52
Bon. Conséquence : ne pas toujours optimiser
Hein Sandro

sandro le 03/11/2011 à 18:58
J'ai vraiment foiré sur ce message (j'ai oublié de changer A et B de place, maintenant ça devrait être bon (j'ai remplacé encore un diviser par un [^-1]).
SandroPersalteas le 04/11/2011 à 08:46
+1 the K ...
Pas grave Sandro, on t'en veut pas. Rappelle toi que le mieux est l'ennemi du bien .

Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.