NOMBRE PREMIER OU PAS ?

cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012 - 10 déc. 2002 à 14:14
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 - 4 mai 2005 à 14:25
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/5258-nombre-premier-ou-pas

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
4 mai 2005 à 14:25
Challenge relevé !

Battu à plate couture !! avec mon pentium II 450 mhz, en 10 secondes !

Mon algo est déposé à : http://www.vbfrance.com/codes/PI-X-__NOMBRE_DE_NOMBRES_PREMIERS_-ALGO_RAPIDE-/31126.aspx


... et il y en a bien 664579... et ils sont tous stockés en mémoire...

Mon challenge : TROUVER ENCORE PLUS RAPIDE !

Bonne chance à tous...

Amicalement,
Us.
wonesek Messages postés 115 Date d'inscription samedi 2 février 2002 Statut Membre Dernière intervention 13 mai 2006
29 avril 2003 à 16:38
Voila un petit challenge:
codé un programme qui trouve tous les nombre premier entre 0 et 10 000 000 le plus rapidement possible.
indice: il y en a 664 579

mon programme le fait en 3 minutes 50 secondes sur un 1.2 Ghz

bonne chance
Proger Messages postés 248 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 19 décembre 2008
19 mars 2003 à 16:28
khaleid, c une cata ton truc...
non seulement ça me met en rogne car tu utilise pas la fonction Mod
et en plus tu utilises le And, ce que 6Po décrit comme "pas bon", et c'est vrai il a pas tord!
ps : hé, 6Po, si t'en connais d'autres des bidouilles, je prends :)
trouvaille du moment : do until...loop plus rapide que for...next
khaleid Messages postés 39 Date d'inscription mercredi 4 juillet 2001 Statut Membre Dernière intervention 8 avril 2014 1
15 déc. 2002 à 14:48
Que pensez vous de ma source :
http://forum.vbfrance.com/article.aspx?Val=5164
sur le sujet !
eagle94 Messages postés 1 Date d'inscription mercredi 11 décembre 2002 Statut Membre Dernière intervention 11 décembre 2002
11 déc. 2002 à 13:51
il existe un algo bien plus rapide pour dire si le nombre et premier ou pas sans utiliser de boucle.
VicoLaChips2 Messages postés 436 Date d'inscription dimanche 20 janvier 2002 Statut Membre Dernière intervention 2 février 2010 2
10 déc. 2002 à 18:33
(2 ^ 13 466 917) - 1 'Source :http://membres.lycos.fr/villemingerard/Premier/record.htm#L20Grands
est un nombre premier... Mais avec VB On peut toujours s'accrocher aux branches pour le trouver !!

C'est quoi cet engouement pour les nombres premiers ??
@+, VIC
cs_6Po Messages postés 105 Date d'inscription jeudi 16 mai 2002 Statut Membre Dernière intervention 22 janvier 2009
10 déc. 2002 à 17:48
Vbsupernul
vivi c'est un RamDrive du serveur. Ca tourne a 1Ghz ca la rame du serveur fait du 1ghz :p
J'utilise ce pour le batch abominable :) Du style qui n'a pas payé sa facture de téléphone ce mois ci :p

Pour proger:
IF ... and ... en VB c'est connu que c'est pas bon.
fo préféré un
IF .... THEN
IF .... THEN
END IF
END IF

en plus en VB 0 faux et tout le reste vrai :p donc quand tu va faire un test fo pas oublie de faire l'inverse... ca VB le fais tres bien mais ca prends tjs un peu de temps :p
C'est pour ca que j'opte tjs pour le byte mais je voulais pas mettre un byte dans le source ci, sinon j'aurais eu plein de poste :p

Ricpperso
=====
ROLF :))) Alors pkoi tu les lis encore ?
Proger Messages postés 248 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 19 décembre 2008
10 déc. 2002 à 16:55
Bouh t'aime pas mon And en VB ? bouhouhou... :(
plus sérieusement, je n'ai jamais entendu dire que les opérations booléenne sont fastidieuse (en terme vitesse), surtout quand on compile son code vb en natif. c'est une fonction gravé en hard dans les cpu depuis le 4004 risc...

Et vi, la différence entre un Dim i et un Dim i as long, c'est 3,7 ms pour trouver que 2147483647 est premier. Le seul moyen de dé partager la plétore de sources "nb premier" sur vbfrance, c'est bien la rapidité du code, alors toi aussi, enc... les drosophiles :)

PS : 6Po, pour un chrono plus préçis que la milliseconde, va donc voir la catégorie "optimisation".
mon 700MHz mets 1.460521 ms exactement (priorité process : real time) pour trouver que 2^31 - 1 est premier. Qui dit mieux? ah, pas tous en même temps svp ;)
Ricpperso Messages postés 236 Date d'inscription jeudi 24 janvier 2002 Statut Membre Dernière intervention 26 octobre 2004
10 déc. 2002 à 16:11
Ya ques des sources sur les nombres premier ici :p:p:p. Bravo a tous les trois
Vbsupernul Messages postés 287 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 18 janvier 2004
10 déc. 2002 à 16:10
?????
un disk qui tourne en Ghz?????
Ca me laisse perplex :D
cs_6Po Messages postés 105 Date d'inscription jeudi 16 mai 2002 Statut Membre Dernière intervention 22 janvier 2009
10 déc. 2002 à 15:25
Pour tout le monde....
Je crée pas cette source dans un but tech mais seulement pour eviter que tous les jours un mec nous postes ca sources isPremier avec 50 linges de code. Je sais qu'il y en a deja plein mais ceux que j'ai vu me font peur et je pense au mec qui comprend rien.


Pour Proger :
=======
LOL le and en VB :p arff ! Sorry....

2e chose le INT --> c'est en 16 bit en VB or les OS sont en 32 Bit le LONG et en 32 BIT le CPU calcul plus vite dans son propre nb de BIT.
Assembleur oblige.
Désolé pour ceux qui aurait Windope Serveur 64 Bits :p

pour l'optimisation n=1 ou n=0
Comme j'ai dit j'ai fait ca en 2min pour répondre a un autre qui avait posté une source avec des test en STING pour savoir si son nombre etait a virgule ou pas...
donc j'ai pas regarde dans les details

1.6 ms ? ummm ... je sais pas moi j'ai un disque de 1Ghz en RAM pure :p (Virutal disque) je suis sur le serveur :p
donc ca tourne a 0 aussi bien une que l'autre

Pour aKh :p
======
Le +1 sert a rien ca va encore faire gagné au moins 0.01 ms a Proger :p

Le true et le false ca me vient du C. et moi faire un exit function sans fait isPremier = false c'est pas bon, c'est pas tres propre
Quand au string a EMPTY et le numerique a 0 je trouve ca idiot et j'ai pas testé
mais je crois qu'en .Net c'est plus comme ca...

Bhen immagine tu crée un tableau de 500 elements

en VB.net
DIM tab[500] as integer //en plus en VB.nET c'est de 0 à 499 et non de 0à500 :p
DIM i
pour faire juste dessous
for i = 0 to 499
tab[i] = i
next i

vb6 va te faire un
DIM tab[500] as integer //0 à 500

-- VB
i = 0
for i = 0 to 500
tab(i) = 0
next i

toi tu crées ton i
dim i
-- vb
i = 0

for i = 0 to 500
tab(i) = i
next i

Tu vois une optimisation TOI ?
Ha moi pas....

Voila sinon je vous conseil d'aller joue à Pacman ou a prophecy engine :p
ici ---> www.dreamersteam.org
cs_6Po Messages postés 105 Date d'inscription jeudi 16 mai 2002 Statut Membre Dernière intervention 22 janvier 2009
10 déc. 2002 à 15:25
Pour tout le monde....
Je crée pas cette source dans un but tech mais seulement pour eviter que tous les jours un mec nous postes ca sources isPremier avec 50 linges de code. Je sais qu'il y en a deja plein mais ceux que j'ai vu me font peur et je pense au mec qui comprend rien.


Pour Proger :
=======
LOL le and en VB :p arff ! Sorry....

2e chose le INT --> c'est en 16 bit en VB or les OS sont en 32 Bit le LONG et en 32 BIT le CPU calcul plus vite dans son propre nb de BIT.
Assembleur oblige.
Désolé pour ceux qui aurait Windope Serveur 64 Bits :p

pour l'optimisation n=1 ou n=0
Comme j'ai dit j'ai fait ca en 2min pour répondre a un autre qui avait posté une source avec des test en STING pour savoir si son nombre etait a virgule ou pas...
donc j'ai pas regarde dans les details

1.6 ms ? ummm ... je sais pas moi j'ai un disque de 1Ghz en RAM pure :p (Virutal disque) je suis sur le serveur :p
donc ca tourne a 0 aussi bien une que l'autre

Pour aKh :p
======
Le +1 sert a rien ca va encore faire gagné au moins 0.01 ms a Proger :p

Le true et le false ca me vient du C. et moi faire un exit function sans fait isPremier = false c'est pas bon, c'est pas tres propre
Quand au string a EMPTY et le numerique a 0 je trouve ca idiot et j'ai pas testé
mais je crois qu'en .Net c'est plus comme ca...

Bhen immagine tu crée un tableau de 500 elements

en VB.net
DIM tab[500] as integer //en plus en VB.nET c'est de 0 à 499 et non de 0à500 :p
DIM i
pour faire juste dessous
for i = 0 to 499
tab[i] = i
next i

vb6 va te faire un
DIM tab[500] as integer //0 à 500

-- VB
i = 0
for i = 0 to 500
tab(i) = 0
next i

toi tu crées ton i
dim i
-- vb
i = 0

for i = 0 to 500
tab(i) = i
next i

Tu vois une optimisation TOI ?
Ha moi pas....

Voila sinon je vous conseil d'aller joue à Pacman ou a prophecy engine :p
ici ---> www.dreamersteam.org
cs_6Po Messages postés 105 Date d'inscription jeudi 16 mai 2002 Statut Membre Dernière intervention 22 janvier 2009
10 déc. 2002 à 15:24
Pour tout le monde....
Je crée pas cette source dans un but tech mais seulement pour eviter que tous les jours un mec nous postes ca sources isPremier avec 50 linges de code. Je sais qu'il y en a deja plein mais ceux que j'ai vu me font peur et je pense au mec qui comprend rien.


Pour Proger :
=======
LOL le and en VB :p arff ! Sorry....

2e chose le INT --> c'est en 16 bit en VB or les OS sont en 32 Bit le LONG et en 32 BIT le CPU calcul plus vite dans son propre nb de BIT.
Assembleur oblige.
Désolé pour ceux qui aurait Windope Serveur 64 Bits :p

pour l'optimisation n=1 ou n=0
Comme j'ai dit j'ai fait ca en 2min pour répondre a un autre qui avait posté une source avec des test en STING pour savoir si son nombre etait a virgule ou pas...
donc j'ai pas regarde dans les details

1.6 ms ? ummm ... je sais pas moi j'ai un disque de 1Ghz en RAM pure :p (Virutal disque) je suis sur le serveur :p
donc ca tourne a 0 aussi bien une que l'autre

Pour aKh :p
======
Le +1 sert a rien ca va encore faire gagné au moins 0.01 ms a Proger :p

Le true et le false ca me vient du C. et moi faire un exit function sans fait isPremier = false c'est pas bon, c'est pas tres propre
Quand au string a EMPTY et le numerique a 0 je trouve ca idiot et j'ai pas testé
mais je crois qu'en .Net c'est plus comme ca...

Bhen immagine tu crée un tableau de 500 elements

en VB.net
DIM tab[500] as integer //en plus en VB.nET c'est de 0 à 499 et non de 0à500 :p
DIM i
pour faire juste dessous
for i = 0 to 499
tab[i] = i
next i

vb6 va te faire un
DIM tab[500] as integer //0 à 500

-- VB
i = 0
for i = 0 to 500
tab(i) = 0
next i

toi tu crées ton i
dim i
-- vb
i = 0

for i = 0 to 500
tab(i) = i
next i

Tu vois une optimisation TOI ?
Ha moi pas....

Voila sinon je vous conseil d'aller joue à Pacman ou a prophecy engine :p
ici ---> www.dreamersteam.org
Proger Messages postés 248 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 19 décembre 2008
10 déc. 2002 à 14:42
Yo aKh, ça va ;)
juste trois bricoles dans l'exemple du commentaire ci-dessus :
if n 1 or n 0 : remplace par if n > -3 and n < 3 (ainsi les négatifs passent aussi)
ajoute : if n mod 2 = 0 then exit function '(on sort si c'est pair)
for i 2 to .... > for i 3 to int(sqr(n)+1) step 2 '(pour sauter les nombres pair)

ainsi ça va 2 fois plus vite :) (quoique, trouver que 2147483647 est pair ne dure que 3,2ms avec l'algo aKh, optimisé on obtient 1,6ms, c'est un peu de l'enc... de drosophiles)

et on peut diviser les nombres négatifs. en plus, faire n n * -1 pour inverser le signe, c'est plus evident (et économe) de faire n abs(n) .

Pitié les gars, taper "Premier" dans la case "chercher" de vbfrance, y'a deja 20 sources là-dessus...
cs_aKheNathOn Messages postés 575 Date d'inscription dimanche 23 décembre 2001 Statut Membre Dernière intervention 23 octobre 2012
10 déc. 2002 à 14:20
En effet c'est bcp plus simple mais ça doit être plus court :

Private Function isPremier(ByVal n As Long) As Boolean
Dim i as Long
If n 1 or n 0 Then Exit Function
'LA BOUCLE DE TESTS
For i = 2 To int(Sqr(n))+1
If n Mod i = 0 Then Exit Function
Next i
isPremier = True
End Function

Enfin tout ça pour te demander pk avoir écrit plein de code autour ... comme
'SI UN POYO MET UN NOMBRE NEGATIF
If n < 0 Then n = n * -1

Au fait ... un boolean non initializé en vb prendra tj la valeur par défault False ... c'est bon à savoir non (Un integer ou Numérique prendra 0 et un String sera Empty) ?
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
10 déc. 2002 à 14:14
Ah, enfin
Rejoignez-nous