Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.
Cribleur de nombres premiers
tapenad le 09/01/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...

azerty1 le 09/01/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

sandro le 09/01/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
azerty1 le 09/01/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
?
linkakro le 09/01/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
The K le 11/01/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 ?

azerty1 le 11/01/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
The K le 11/01/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" ? Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.