RECHERCHER LES PREMIERS NOMBRES PREMIERS

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 23 avril 2006 à 12:42
manu1506 Messages postés 54 Date d'inscription jeudi 13 novembre 2003 Statut Membre Dernière intervention 25 avril 2012 - 9 juin 2007 à 16:04
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/37192-rechercher-les-premiers-nombres-premiers

manu1506 Messages postés 54 Date d'inscription jeudi 13 novembre 2003 Statut Membre Dernière intervention 25 avril 2012
9 juin 2007 à 16:04
Pour accélérer la recherche, les nombres suivants ne peuvent pas être premiers :

- les nombres pairs (divisibles par 2)
- les nombres finissant par 5 ou par 0 (divisibles par 5)
- les nombres dont la somme des chiffres les constituant
est multiple de 3 (divisibles par 3)

Notons toutefois que les nombres 2, 3 et 5 sont premiers.
cs_needle Messages postés 34 Date d'inscription mardi 31 août 2004 Statut Membre Dernière intervention 11 juillet 2006
11 juil. 2006 à 12:16
Salut axar, (désolé pour le retard)
alors en utilisant la fonction time (pas super précis mais tanpis) je trouve les nombres premier de 1 a 1000000 (le dernier étant 999983):
en 1s sans afficher les nombres sur la form
en 18s en les affichant sur la form

Merci à nono pour les conseils d'optimisation! ;)
cs_Axar Messages postés 19 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 12 juillet 2012
4 juil. 2006 à 16:06
salut je voudrait juste savoir combien de temps mts tu a trouvé les nombres premiers de 1 à 1 000 000. merci
cs_needle Messages postés 34 Date d'inscription mardi 31 août 2004 Statut Membre Dernière intervention 11 juillet 2006
15 mai 2006 à 17:50
C'est parceque j'utilise un composant qui s'appelle XPManifest. C'est juste pour donner un effet Windows Xp!
Donc tu peut enlever le composant de la fiche le programme marchera quand même!
Ciao
cmdm Messages postés 1 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 15 mai 2006
15 mai 2006 à 00:43
Bonjour

erreur TXPManifest not found

D'où vient l'erreur
J'ai un delphi 6

Merci
cs_needle Messages postés 34 Date d'inscription mardi 31 août 2004 Statut Membre Dernière intervention 11 juillet 2006
24 avril 2006 à 08:47
Salut delphiprog! bon ben je vais essayer beginupdate et endupdate, mais je ne connaissait pas du tout...
En fait je vois pas très bien comment ca marche mais je vais aller faire un tour dans l'aide de delphi!

Merci de vos conseils!
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
23 avril 2006 à 23:42
"Mais si je ne la mets pas a jour à chaque nombres premier trouvé il faudra que je les affiche tous d'un coup et ça va aussi prendre du temps non? "

Tu peux faire un appel à la méthode BeginUpdate au début du calcul. Une fois terminé, tu appelles la méthode EndUpdate de la propriété Items de List1. Et là, le temps de traitement sera divisé par un facteur significatif. Résultats garantis et qui prouve que ce qu'a dit Nono40 est tout à fait exact.
cs_needle Messages postés 34 Date d'inscription mardi 31 août 2004 Statut Membre Dernière intervention 11 juillet 2006
23 avril 2006 à 21:14
Salut nono!
Merci de me dire comment optimiser mon code car je débute en programmation donc je ne sais pas vraiment quelles fonctions prennent du temps...
Juste un truc il faut utiliser power(xxx,0.5) car sqrt n'accepte pas les int64.
C'est vrai que c'est plus simple de calculer la racine carré en debut de boucle (c'est tout con mais je n'y avais pas pensé ^^).
Sinon pour le processmessages je veut bien le mettre autre part mais lorsqu'on vas arriver a de très très très grands nombres le programme va parraître figé pendant un certain temps.
Ce que tu appelles mettre a jour la liste c'est le ListBox1.Items.Add(); ?
Mais si je ne la mets pas a jour à chaque nombres premier trouvé il faudra que je les affiche tous d'un coup et ça va aussi prendre du temps non? A moins qu'on ne veuille juste mettre les nombres dans un fichier texte (sans les afficher dans la liste box)... je vais faire une option pour remedier a ce problème.
Merci de tes conseils...

Ps: moi aussi je prendrais bien un petite bière ^^
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
23 avril 2006 à 18:34
Tout sauf optimisé ton code :wink:

Il ne faut pas utiliser Power(xxx,0.5) mais SQRT()
Il ne faut calculer le SQRT qu'une seule fois au début de boucle car il ne change pas.
Il ne faut pas faire trop de processMessages, ça perd un temps fou.
Il ne faut pas mettre à jour la liste à chaque fois, mais seulement une fois sur N ou sur demande ( touche ou sortie ). La mise à jour de la liste est énormement plus longue que le calcul d'un nombre.
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
23 avril 2006 à 12:42
1, 3 , 5 , 7, 11 ... 75 345 767 876 765 423 431 321 891 ouf !!
je prendrai bien une bière..