Spé Maths: décomposition en facteurs premiers |
Auteur |
Message |
Métalocif
Autorisation : Membre
Nb de messages : 92
Inscrit le : Lun 10 Mai 2010, 19:24
|
Posté le : Dim 09 Oct 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
---------------------- "On ne ment jamais autant qu'avant les élections, pendant la guerre et après la chasse." Clémenceau |
|
|
|
azerty1
Autorisation : Membre
Nb de messages : 468
Inscrit le : Dim 12 Déc 2010, 20:44
|
Posté le : Dim 09 Oct 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
---------------------- Ti-Connect 64bits
PROTECT
Tuto Skin Perso Wabbitemu |
|
|
|
Google_AdSense
|
Publicité
|
|
|
|
|
sandro
Autorisation : Membre
Nb de messages : 1387
Inscrit le : Ven 25 Mar 2011, 22:58
|
Posté le : Dim 09 Oct 2011, 17:47
|
|
|
ça à l'air pas mal mis à part que ça ne prend pas vraiment en compte es nombres premiers suppérieurs à 41.
Sandro
---------------------- mort à l'inutile, place à la mémoire libre et aux programmes |
|
|
|
azerty1
Autorisation : Membre
Nb de messages : 468
Inscrit le : Dim 12 Déc 2010, 20:44
|
Posté le : Dim 09 Oct 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...
---------------------- Ti-Connect 64bits
PROTECT
Tuto Skin Perso Wabbitemu |
|
|
|
sandro
Autorisation : Membre
Nb de messages : 1387
Inscrit le : Ven 25 Mar 2011, 22:58
|
Posté le : Dim 09 Oct 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)
---------------------- mort à l'inutile, place à la mémoire libre et aux programmes |
|
|
|
Métalocif
Autorisation : Membre
Nb de messages : 92
Inscrit le : Lun 10 Mai 2010, 19:24
|
Posté le : Lun 10 Oct 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étalocif
---------------------- "On ne ment jamais autant qu'avant les élections, pendant la guerre et après la chasse." Clémenceau |
|
|
|
Persalteas
Autorisation : Membre
Nb de messages : 2164
Inscrit le : Sam 23 Jan 2010, 20:09
|
Posté le : Lun 10 Oct 2011, 13:40
|
|
|
41 c'est le max ... qu'est-ce qui pourrait atteindre ou dépasser "le" 42...
|
|
|
|
sandro
Autorisation : Membre
Nb de messages : 1387
Inscrit le : Ven 25 Mar 2011, 22:58
|
Posté le : Lun 10 Oct 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.
Sandro
---------------------- mort à l'inutile, place à la mémoire libre et aux programmes |
|
|
|
tonio 2
Autorisation : Membre
Nb de messages : 18
Inscrit le : Mar 01 Nov 2011, 19:00
|
Posté le : Mar 01 Nov 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
|
|
|
|
Google_AdSense
|
Publicité
|
|
|
|
|
The K
Autorisation : Membre
Nb de messages : 878
Inscrit le : Sam 15 Oct 2011, 11:07
|
Posté le : Mer 02 Nov 2011, 10:25
|
|
|
Huhu sinon ... il y a moyen de raccourcir encore ...
Ce programme n'est pas de moi (source : http://www.siteduzero.com/tutoriel-3-407863-tp-decomposeur.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
|
---------------------- La la la ...
Avez-vous pensé à regarder le manuel avant de demander conseil ? Un manuel est fait avant tout pour être consulté : MANUEL
Un problème de programmation ? Allez consulter ce tutoriel crée pour cela : TUTORIEL PROGRAMMATION
Vous avez un problème avec l'ordinateur avec votre calculatrice ? SOLUTION EN VIDEO
Mes programmes sur le site : Produit scalaire KMorpion Puissance 4 Mastermind
Mes nouveaux programmes de calcul formel : FCarré FPrime
Projet base de données : ici mais abandonné. Trop de travail ... |
|
|
|
sandro
Autorisation : Membre
Nb de messages : 1387
Inscrit le : Ven 25 Mar 2011, 22:58
|
Posté le : Mer 02 Nov 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
---------------------- mort à l'inutile, place à la mémoire libre et aux programmes |
|
|
|
The K
Autorisation : Membre
Nb de messages : 878
Inscrit le : Sam 15 Oct 2011, 11:07
|
Posté le : Mer 02 Nov 2011, 19:31
|
|
|
Ouais ... Mouais ... Tu chipotes un peu la
Et puis même t'es sur d'économiser au moins seul octet ?
---------------------- La la la ...
Avez-vous pensé à regarder le manuel avant de demander conseil ? Un manuel est fait avant tout pour être consulté : MANUEL
Un problème de programmation ? Allez consulter ce tutoriel crée pour cela : TUTORIEL PROGRAMMATION
Vous avez un problème avec l'ordinateur avec votre calculatrice ? SOLUTION EN VIDEO
Mes programmes sur le site : Produit scalaire KMorpion Puissance 4 Mastermind
Mes nouveaux programmes de calcul formel : FCarré FPrime
Projet base de données : ici mais abandonné. Trop de travail ... |
|
|
|
sandro
Autorisation : Membre
Nb de messages : 1387
Inscrit le : Ven 25 Mar 2011, 22:58
|
Posté le : Mer 02 Nov 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é
Sandro
---------------------- mort à l'inutile, place à la mémoire libre et aux programmes |
|
|
|
The K
Autorisation : Membre
Nb de messages : 878
Inscrit le : Sam 15 Oct 2011, 11:07
|
Posté le : Mer 02 Nov 2011, 20:04
|
|
|
Va pour 4 octets en moins
(tu m'impressionnes la quand même t'sais )
---------------------- La la la ...
Avez-vous pensé à regarder le manuel avant de demander conseil ? Un manuel est fait avant tout pour être consulté : MANUEL
Un problème de programmation ? Allez consulter ce tutoriel crée pour cela : TUTORIEL PROGRAMMATION
Vous avez un problème avec l'ordinateur avec votre calculatrice ? SOLUTION EN VIDEO
Mes programmes sur le site : Produit scalaire KMorpion Puissance 4 Mastermind
Mes nouveaux programmes de calcul formel : FCarré FPrime
Projet base de données : ici mais abandonné. Trop de travail ... |
|
|
|
tonio 2
Autorisation : Membre
Nb de messages : 18
Inscrit le : Mar 01 Nov 2011, 19:00
|
Posté le : Jeu 03 Nov 2011, 8: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
Autorisation : Membre
Nb de messages : 878
Inscrit le : Sam 15 Oct 2011, 11:07
|
Posté le : Jeu 03 Nov 2011, 18:52
|
|
|
Bon. Conséquence : ne pas toujours optimiser
Hein Sandro
---------------------- La la la ...
Avez-vous pensé à regarder le manuel avant de demander conseil ? Un manuel est fait avant tout pour être consulté : MANUEL
Un problème de programmation ? Allez consulter ce tutoriel crée pour cela : TUTORIEL PROGRAMMATION
Vous avez un problème avec l'ordinateur avec votre calculatrice ? SOLUTION EN VIDEO
Mes programmes sur le site : Produit scalaire KMorpion Puissance 4 Mastermind
Mes nouveaux programmes de calcul formel : FCarré FPrime
Projet base de données : ici mais abandonné. Trop de travail ... |
|
|
|
sandro
Autorisation : Membre
Nb de messages : 1387
Inscrit le : Ven 25 Mar 2011, 22:58
|
Posté le : Jeu 03 Nov 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]).
Sandro
---------------------- mort à l'inutile, place à la mémoire libre et aux programmes |
|
|
|
Persalteas
Autorisation : Membre
Nb de messages : 2164
Inscrit le : Sam 23 Jan 2010, 20:09
|
Posté le : Ven 04 Nov 2011, 8:46
|
|
|
+1 the K ...
Pas grave Sandro, on t'en veut pas. Rappelle toi que le mieux est l'ennemi du bien .
|
|
|
|