cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 2021
-
23 avril 2006 à 12:42
manu1506
Messages postés54Date d'inscriptionjeudi 13 novembre 2003StatutMembreDernière intervention25 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.
manu1506
Messages postés54Date d'inscriptionjeudi 13 novembre 2003StatutMembreDernière intervention25 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és34Date d'inscriptionmardi 31 août 2004StatutMembreDernière intervention11 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és19Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention12 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és34Date d'inscriptionmardi 31 août 2004StatutMembreDernière intervention11 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és1Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention15 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és34Date d'inscriptionmardi 31 août 2004StatutMembreDernière intervention11 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és4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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és34Date d'inscriptionmardi 31 août 2004StatutMembreDernière intervention11 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és962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 20062 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és4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 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..
9 juin 2007 à 16:04
- 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.
11 juil. 2006 à 12:16
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! ;)
4 juil. 2006 à 16:06
15 mai 2006 à 17:50
Donc tu peut enlever le composant de la fiche le programme marchera quand même!
Ciao
15 mai 2006 à 00:43
erreur TXPManifest not found
D'où vient l'erreur
J'ai un delphi 6
Merci
24 avril 2006 à 08:47
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!
23 avril 2006 à 23:42
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.
23 avril 2006 à 21:14
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 ^^
23 avril 2006 à 18:34
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.
23 avril 2006 à 12:42
je prendrai bien une bière..