LA CONJECTURE DE SIERPINSKI

Messages postés
968
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
- - Dernière réponse : pgl10
Messages postés
313
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
6 juillet 2019
- 7 déc. 2009 à 13:48
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/50879-la-conjecture-de-sierpinski

Afficher la suite 
cs_juju12
Messages postés
968
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4 -
Bonjour;

if(3*d/n*n==3*d) im=3*d/n; else im=1+3*d/n;
peut être remplacé par simplement :
im=1+(3*d-1)/n;

D'un point de vue algorithmique, il n'est pas nécessaire de faire la boucle sur k; il suffirait par exemple de le calculer à partir de i et j
5ijk=n(ij+ik+jk) => k=(nij)/(5ij-n(i+j)),
puis regarder s'il y a égalité 5ijk==n(ij+ik+jk).
Ca diminuera le temps de calcul d'un facteur assez élevé! (bien que pour des nombres aussi petits je suppose que le calcul ne prend qu'un instant, mais bon, pour le principe, et si tu veux par la suite travailler avec des nombres arbitrairement grands...)


Voilà, c'est pas exhaustif, on peut toujours améliorer... mais bonne continuation.
pgl10
Messages postés
313
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
6 juillet 2019
1 -
Grand merci à JUJU12 pour ses deux améliorations judicieuses. La deuxième permet effectivement de fortement diminuer le temps de traitement. J'avais déjà limité la boucle sur i. Maintenant la boucle sur k est supprimée. Ce qui permet d'utiliser des intervalles [1,limite] aussi grands que l'on veut.
pgl10
Messages postés
313
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
6 juillet 2019
1 -
Pour ceux qui le souhaitent il y a aussi une autre méthode :
en effet si : n/d=1/i+1/j+1/k
on a : r=(n*i-d)/(d*i)=(j+k)/(j*k)
connaissant i et j on calcule en (long double) : r
puis k=j/(r*j-1) => OK si k entier.
Ceci pourrait avoir de meilleures limites autorisées.
pgl10
Messages postés
313
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
6 juillet 2019
1 -
Dans la version actuelle de ce programme,
avec les entiers de [1,1226421]
2477/5 , 2557/5 , 2663/5 et 2999/5
n'ont qu'une seule décomposition.
Ont-ils d'autres décompositions ?
Quels autres nombres n'ont qu'une décomposition ?
pgl10
Messages postés
313
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
6 juillet 2019
1 -
Comme je ne peux pas corriger, c'est bien sûr
de : 5/2477 , 5/2557 , 5/2663 et 5/2999
dont je voulais parler ci-dessus. Désolé, pgl10