Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

NOMBRES PREMIERS


Information sur la source

Catégorie :Maths Niveau : Débutant Date de création : 08/12/2002 Date de mise à jour : 08/12/2002 22:55:16 Vu / téléchargé: 1 031 / 93

Note :
8,5 / 10 - par 4 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (22)
Ajouter un commentaire et/ou une note

Description

Juste pour trouver autant de nombres premiers qu'on le demande.
C'est mon premier post, je débute, le code est un peu tordu et (très) mal commenté, mais je suis assez content de sa rapidité (19 secondes pour 500 000 nbres premiers sur un duron 1Ghz, mais un fichier texte de 5Mo). J'attends vos commentaires avec impatience, y'a sûrement des choses à améliorer.
 

Conclusion

MAJ du ZIIIIP
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de Bricomix le 08/12/2002 20:42:09

Ben sur mon Athlon XP1800+ (euh, j'ai un petit problême avec ma carte mère, donc il est qu'a 1150Mhz au lieu de 1500MHz), j'ai fait 16 secondes pour les 500000. En tout cas c'est bien, j'en avais fait un beaucoup plus beau, mais 10x moins rapide. Très bon code (un petit peu tordu quand même) : 9/10

signaler à un administrateur
Commentaire de Vbsupernul le 08/12/2002 21:12:19

Super le prog:
Pentium 4 à 1695 Mhz, moins de 23 secondes pour trouver UN MILLION de nombres premiers...
Y faudrait juste rajouter un chronomètre ;)
10/10!!!

signaler à un administrateur
Commentaire de Baff le 08/12/2002 21:22:18

Merci beaucoup, j'suis flatté !
Je me suis bien creusé les méninges aussi faut dire.

signaler à un administrateur
Commentaire de Vbsupernul le 08/12/2002 21:25:00

Ouè, ben qd même, essaie de rajouter un chrono, parcke j'ai essayé mais le chrono bouge pas, toute la mémoire est captée par le calcul...

signaler à un administrateur
Commentaire de tex le 08/12/2002 21:32:36

...y en a qu'on la bosse des maths en ce moment sur vbfrance :-)

signaler à un administrateur
Commentaire de Baff le 08/12/2002 21:52:06

Ok, je vais essayer pour le chrono, mais si ça doit ralentir, j'vois pas bien l'intérêt... Faut ruser p'têt... Mais ça risque de prendre un peu de temps, c'est vrai que je débute. Merci pour les conseils.
A+

signaler à un administrateur
Commentaire de Baff le 08/12/2002 23:01:10

D'ailleurs ça y est, je me suis servi d'un code posté par Popi (merci à lui :-) ) pour les calculs sur les heures, le zip est mis à jour.

signaler à un administrateur
Commentaire de Vbsupernul le 09/12/2002 08:26:59

12 secondes pour 500000...
C vraiment super rapide

signaler à un administrateur
Commentaire de Vbsupernul le 09/12/2002 08:33:06

Lol, à quand la ^m chose pour faire avancer seti@home + vite ? :D

signaler à un administrateur
Commentaire de Proger le 09/12/2002 10:00:36

Ce qui est impressionant c'est surtout la vitesse via interpréteur de code (mode création de vb) et la vitesse de l'exécutable compilé en code natif :
- 1700 ms en interpreteur
- 230 ms en exe natif.
(j'ai ajouter un chti chrono bien sûr pour avoir ces resultats)
mais on peux mieux faire encore ! en se débarassant de la booleenne "erreur" on gagne quelques ms (je te laisse trouver comment)

signaler à un administrateur
Commentaire de ronanry le 09/12/2002 10:16:52

si ton code est si bien que ca...(j'ai aps encore regarder :-p (honte a moi))
bref si c si bien... les clefs publiques (je parle niveau cryptage la) ont du souci a se faire...

signaler à un administrateur
Commentaire de Proger le 09/12/2002 13:28:49

Le chrono précis :
dans le sub command_click :
t1! = Timer
Call calcul(NbrMax, t())
t2! = Timer
label.caption = (t2! - t1!) * 1000 & " ms"

signaler à un administrateur
Commentaire de Bafff le 09/12/2002 14:23:39

Merci Proger pour le code, justement je galérais la-dessus, en plus, mon login baff marche pus, j'ai dû rajouter un "f". Je cherche pour virer le booleen, mais c'est pas concluant pour l'instant, je perd du temps.
Vbsupernul, pour le seti@home c'est vrai qu'il faudrait accélérer un peu les calculs.
Et en ce qui concerne le cryptage, y'a des gens bien plus calés qui cherchent depuis longtemps, et qui doivent rigoler en voyant mon code. Merci pour l'aide et les commentaires, ça motive tout plein....

signaler à un administrateur
Commentaire de Proger le 09/12/2002 18:33:30

Bon, Baff², indice : utilise GoTo pour remplacer le booleen. Je sais, c'est "sale", mais c'est rapide. Par la même occasion tu te débarasse des tests superflu (y'en a!) et tu réduit à une ligne le test a mod t(x) = 0 then goto ... tu gagnes 5% de vitesse. vala :) à vot' service msieur dame.
ps : j'aime bien les artefacts que tu utilises pour optimiser le code, mais tu en a oublié 1 : tout chiffre se terminant par 5 n'est pas premier, donc, en plaçant judicieusement un "mod 5 = 0" tu peux encore grapillé.

signaler à un administrateur
Commentaire de TheBabyCool le 09/12/2002 23:12:36

moi j'ai fait un autre algo qui arrive a env. 1million en moin de 20s sur mon p2 400mhz.

signaler à un administrateur
Commentaire de TheBabyCool le 09/12/2002 23:12:47

Mais très bien quand meme

signaler à un administrateur
Commentaire de Bricomix le 10/12/2002 19:36:02

Pour Baff, efface tout ce qu'il y a dans la procédure sub "calcul" et mets-ça, c'est 2 fois plus rapide (mon athlon a 1150MHz a fait - de 23 secondes les 1 millions, au lieu de 43 au départ !!!) :

Dim a As Long, n As Long, x As Long, y As Double

ReDim t(nbr + 2)

a = 3 'on demarre direct en testant 3
n = 1
y = 2 'sera la racine carrée du nombre à tester
t(1) = 2

While n <= nbr
  x = 1
  If n Mod 2 = 0 Or n Mod 5 = 0 Then GoTo LTomber
  While x <= n And t(x) < y
    If a Mod t(x) = 0 Then GoTo NFirst
    x = x + 1
  Wend
LTomber:
    n = n + 1
    t(n) = a
NFirst:
  a = a + 2
  y = Sqr(a + 1)
Wend

signaler à un administrateur
Commentaire de Baffff le 10/12/2002 21:09:29

Vi, j'ai bien pensé à un truc comme ça, mais en bon étudiant modèle, on m'a dit d'éviter les GOTO, alors, j'évitais les GOTO. Ceci dit effectivement c'est 2 fois plus rapide. Par contre, je peux pas changer la source, y faut que je recrée un compte à chaque fois que je veux me connecter, comprend pas... Mon login va finir par être long :-). Merci à tous pour votre aide
A+

signaler à un administrateur
Commentaire de Baffff le 10/12/2002 23:48:07

Heu, Bricomix, au fait, vérifie quand même car ça marche jusqu'à 7, après il me trouve que 9 est un nb premier, y'a un binz....
J'ai pas le temps de coder pour l'instant, je regarde demain.

signaler à un administrateur
Commentaire de Bricomix le 11/12/2002 15:33:27

En faites je me suis complètement trompé, alors je l'ai remodifié, et voilà le nouveau code (environ 5% plus rapide que l'original) ... voilà le nouveau code :

Dim a As Long, n As Long, x As Long, y As Double

ReDim t(nbr + 2)

a = 3 'on demarre direct en testant 3
n = 1
y = 2 'sera la racine carrée du nombre à tester
t(1) = 2

While n <= nbr
  x = 1
  While x <= n And t(x) < y
    If a Mod t(x) = 0 Then GoTo NFirst
    x = x + 1
  Wend
  n = n + 1
  t(n) = a
NFirst:
  a = a + 2
  y = Sqr(a + 1)
Wend

signaler à un administrateur
Commentaire de Baffff le 11/12/2002 19:03:04

Vi, j'ai fait à peu près le meme dans le train c't'aprèm (je l'ai pas sous les yeux), on peut aussi commencer avec x = 2 pour éviter de tester la division par 2 pour chaque nombre
(en modifaint 2 ou 3 trucs)

signaler à un administrateur
Commentaire de Julien39 le 06/05/2006 10:06:37

Beaucoup de maladresses pour le calcul, la boucle while peut aisément être remplacée par une for, le code est illisible, non commenté et tu n'utilise aucune des optimisations possibles.
5/10 parce qu'il fonctionne et pour le calcul du temps

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,577 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.