| cribleur de nombres premiers |
| Auteur |
Message |
tapenad
Autorisation : Membre
Nb de messages : 197
Inscrit le : Jeu 17 Nov 2011, 13:20
|
Posté le : Lun 09 Jan 2012, 20:10
|
|
|
voici un prgm + ou- utile(pas a mon niveau en tout cas) qui permet de trouver tout les nombres premiers de 1 à un certains nombre,il rame un peu(beaucoup) mais il est pratique pour les premiers nombres premiers( ):
| Code |
prgm:crible
:0->N
:For(A,1,1000) ///2000 est la limite
:If partDec(A/2)=0.5
:Then
:If parDec(A-3)[differend de]0
:Then
:For(K,2,A/2-0.5
:If parDec(A/K)=0
:N+1->N
:End
:End
:End
:If partDec(A/2)=0 et partDec(A/3)=0
:2->N
:If A=3 ou A=2
:If N=0
:Disp A
:0->N
:End
|
et voila... 
---------------------- L’erreur est humaine, mais pour provoquer une vraie catastrophe, il faut un ordinateur.
je suis premier!!!
je m'aime. |
 |
|
| |
azerty1
Autorisation : Membre
Nb de messages : 438
Inscrit le : Dim 12 Déc 2010, 20:44
|
Posté le : Lun 09 Jan 2012, 20:37
|
|
|
Je pense qu'on pourra l'optimiser (je laisse cette tâche pour sandro )
Sinon l'optimiser en changeant completement le mode fonctionnement, au lieu d'afficher une table des nombres premiers jusqu'à X, on pourrait simplement demander un nombre X à l'utilisateur et regarder s'il est premier, si non, afficher ses diviseurs. Regarde dans des sujets plus anciens, ce type de prog' a été traité plus d'une fois 
---------------------- Ti-Connect 64bits
PROTECT |
 |
|
| |
sandro
Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
|
Posté le : Lun 09 Jan 2012, 21:43
|
|
|
Bon, à la va-vite:
| Code | prgm:crible
:EffVarNFor(A,1,E3 //le E des puissances de 10 ///2000 est la limite
:If partDec(A/2)=0.5
:Then
:If parDec(A //car partdec(A)=partdec(A-3)
:Then
:For(K,2,.5A-.5
:If parDec(A/K
:N+1->N
:End
:End
:End
:If partDec(.5A)=0 et non(partDec(A/3
:2->N
:If A=3 ou A=2
:If non(N
:EffVar NDisp A
:End
|
---------------------- mort à l'inutile, place à la mémoire libre et aux programmes |
 |
|
| |
azerty1
Autorisation : Membre
Nb de messages : 438
Inscrit le : Dim 12 Déc 2010, 20:44
|
Posté le : Lun 09 Jan 2012, 22:11
|
|
|
Et à la fin, on ne pourrait pas remplacer
| Code | :If A=3 ou A=2
:If non(N
:EffVar NDisp A |
Par
| Code | :If A=3 ou A=2 and non(N
:EffVar nDispA |
?
---------------------- Ti-Connect 64bits
PROTECT |
 |
|
| |
linkakro
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
|
Posté le : Lun 09 Jan 2012, 22:41
|
|
|
Le premier If (cité ci-dessus) empêche le second de travailler. Soit c'est élaboré, soit c'est une erreur de copie.
Je crois que cela correspond rigoureusement à ceci mais je n'ai rien testé.
| Code | If (A=3 ou A=2) et non(N) ou (A-3 et A-2
EffVar NDisp A |
Autre code immaginé sur le tas et testé sous vti.
| Code | {2->L1
Disp 2
For(A,3,E3,2
If prod(fPart(A/L1
Then
A->L1(1+dim(L1
Pause A
End
L1 |
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store |
 |
|
| |
The K
Autorisation : Membre
Nb de messages : 850
Inscrit le : Sam 15 Oct 2011, 11:07
|
Posté le : Mer 11 Jan 2012, 13:56
|
|
|
| Code | :0->N
:For(A,1,1000) ///2000 est la limite
:If partDec(A/2)=0.5
:Then
:If parDec(A-3)[differend de]0
:Then
:For(K,2,A/2-0.5 |
Je pense que sans les deux then ça marche aussi.
je m'explique : premier if : "if partdec( etc" est vrai, la condition juste après est éxécutée. C'est un autre if. Si il est vrai, la conditon juste après est aussi éxécutée, donc on éxécute la boucle for.
J'ai raison ou pas ? 
---------------------- La la la ...
Avez-vous pensé à regarder le manuel avant de demander conseil ? Un manuel est fait avant tout pour être consulté : MANUEL
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 ... |
 |
|
| |
azerty1
Autorisation : Membre
Nb de messages : 438
Inscrit le : Dim 12 Déc 2010, 20:44
|
Posté le : Mer 11 Jan 2012, 20:33
|
|
|
Mais alors pourquoi ne pas mettre:
| Code | :0->N
:For(A,1,1000) ///2000 est la limite
:If (partDec(.5A)=.5) et (parDec(A-3))
:Then
:For(K,2,A/2-0.5
:... //2eme boucle For
:End
:End //Fin du If
:... //Suite première boucle For, exécutée dans les 2 cas.
:End |
---------------------- Ti-Connect 64bits
PROTECT |
 |
|
| |
The K
Autorisation : Membre
Nb de messages : 850
Inscrit le : Sam 15 Oct 2011, 11:07
|
Posté le : Mer 11 Jan 2012, 21:35
|
|
|
la tu as les deux octets du "et" et "then" alors que sinon tu n'as qu'un octet avec le "if" ?
---------------------- La la la ...
Avez-vous pensé à regarder le manuel avant de demander conseil ? Un manuel est fait avant tout pour être consulté : MANUEL
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 ... |
 |
|
| |