Skanenruf
Messages postés38Date d'inscriptiondimanche 12 octobre 2008StatutMembreDernière intervention30 juin 2010 12 oct. 2009 à 19:28
On pourrait ajouter la liste des 100 premiers nombres premiers au début du test de primalité mais est-ce que le nombre de conditions testées n'est pas plus gros que le nombre de cas testés de façon itérative ? En mettant une condition n<100 pour exclure des tests tous les gros nombres.
If n < 100 Then If n 2 Or n 3 Or n = 5 Or n = 7 Or n = 11 Or n = 13 Or n = 17 Or n = 19 Or n = 23 Or n = 29 Or n = 31 Or n = 37 Or n = 41 Or n = 43 Or n = 47 Or n = 53 Or n = 59 Or n = 61 Or n = 67 Or n = 71 Or n = 73 Or n = 79 Or n = 83 Or n = 89 Or n = 97 Then Return True
End If
jmocaro
Messages postés14Date d'inscriptionmardi 25 mars 2003StatutMembreDernière intervention19 octobre 2007 12 oct. 2009 à 19:09
re bonjour,
on en finit jamais avec les améliorations,
cependant j'en propose une autre: le test de primalité coûte cher.
On pourrait imaginer de stocker si on a testé la primalité d'un entier, et son résultat. Dans une ou 2 collections par exemple (je suis VB6-iste...)
Ceci serait très profitable pour la conjecture faible.
à +
jmocaro
Skanenruf
Messages postés38Date d'inscriptiondimanche 12 octobre 2008StatutMembreDernière intervention30 juin 2010 12 oct. 2009 à 18:50
Merci beaucoup pour vos réponses à tous les trois, j'en ai profité pour amélioré certains points :
- J'ai commencé par optimiser mon test de primalité avec comme limites du processus itératif : 2 et math.sqrt(n). (Merci Jmocaro et Philm_be).
- J'ai supprimé la seconde boucle de mon algorithme sur la conjecture forte (effectivement c'était inutile).
- J'ai ajouté un algorithme (sur la même base) pour la conjecture faible en utilisant cette fois deux boucles imbriquées ainsi que la méthode soustractive (n-i-j).
PS. Je rappelle que la conjecture faible est la même que la conjecture classique (forte) de Goldbach sauf que c'est pour les impairs supérieurs à 7 qui sont donc (on a conjecturé) égaux à une somme de trois nombres premiers (impairs).
jmocaro
Messages postés14Date d'inscriptionmardi 25 mars 2003StatutMembreDernière intervention19 octobre 2007 12 oct. 2009 à 10:00
bonjour,
je pense que la deuxième boucle est inutile puisque de toute façon j=n-i
pourquoi boucler pour chercher un tel 'j' ?...
Il reste à tester que j(=n-i) est premier.
Cette première boucle peut s'arrêter à la moitié car i+j=j+i.
La primalité se teste de 2 jusqu'à la racine de n, c'est plus restrictif que la moitié.
Jean-Maurice
philbar71
Messages postés70Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 5 juillet 2013 12 oct. 2009 à 09:52
Bon courage pour la suite de tes recherches, mais ne néglige quand même pas ton français car dans un CV ou dans d'autres domaines c'est dans la qualité de l'écriture qu'on détectecte les meilleurs candidats.
philm_be
Messages postés2Date d'inscriptionmardi 13 juillet 2004StatutMembreDernière intervention12 octobre 2009 12 oct. 2009 à 09:42
Pour la fonction "primalite", rien ne sert de partir de n-1 me semble-t-il. Il suffit de commencer à la moitié de n. Tout ce qui est supérieur ne pourra forcément pas être un diviseur.
Philippe
12 oct. 2009 à 19:28
If n < 100 Then If n 2 Or n 3 Or n = 5 Or n = 7 Or n = 11 Or n = 13 Or n = 17 Or n = 19 Or n = 23 Or n = 29 Or n = 31 Or n = 37 Or n = 41 Or n = 43 Or n = 47 Or n = 53 Or n = 59 Or n = 61 Or n = 67 Or n = 71 Or n = 73 Or n = 79 Or n = 83 Or n = 89 Or n = 97 Then Return True
End If
12 oct. 2009 à 19:09
on en finit jamais avec les améliorations,
cependant j'en propose une autre: le test de primalité coûte cher.
On pourrait imaginer de stocker si on a testé la primalité d'un entier, et son résultat. Dans une ou 2 collections par exemple (je suis VB6-iste...)
Ceci serait très profitable pour la conjecture faible.
à +
jmocaro
12 oct. 2009 à 18:50
- J'ai commencé par optimiser mon test de primalité avec comme limites du processus itératif : 2 et math.sqrt(n). (Merci Jmocaro et Philm_be).
- J'ai supprimé la seconde boucle de mon algorithme sur la conjecture forte (effectivement c'était inutile).
- J'ai ajouté un algorithme (sur la même base) pour la conjecture faible en utilisant cette fois deux boucles imbriquées ainsi que la méthode soustractive (n-i-j).
PS. Je rappelle que la conjecture faible est la même que la conjecture classique (forte) de Goldbach sauf que c'est pour les impairs supérieurs à 7 qui sont donc (on a conjecturé) égaux à une somme de trois nombres premiers (impairs).
12 oct. 2009 à 10:00
je pense que la deuxième boucle est inutile puisque de toute façon j=n-i
pourquoi boucler pour chercher un tel 'j' ?...
Il reste à tester que j(=n-i) est premier.
Cette première boucle peut s'arrêter à la moitié car i+j=j+i.
La primalité se teste de 2 jusqu'à la racine de n, c'est plus restrictif que la moitié.
Jean-Maurice
12 oct. 2009 à 09:52
http://www.vbfrance.com/codes/TESTER-CONJECTURE-GOLDBACH-TOUT-NOMBRE-PAIR-SUPERIEUR-EST_32365.aspx
Bon courage pour la suite de tes recherches, mais ne néglige quand même pas ton français car dans un CV ou dans d'autres domaines c'est dans la qualité de l'écriture qu'on détectecte les meilleurs candidats.
12 oct. 2009 à 09:42
Philippe