pgl10
Messages postés381Date d'inscriptionsamedi 18 décembre 2004StatutNon membreDernière intervention25 avril 202411 7 déc. 2009 à 13:48
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
pgl10
Messages postés381Date d'inscriptionsamedi 18 décembre 2004StatutNon membreDernière intervention25 avril 202411 7 déc. 2009 à 11:53
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és381Date d'inscriptionsamedi 18 décembre 2004StatutNon membreDernière intervention25 avril 202411 23 nov. 2009 à 11:59
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és381Date d'inscriptionsamedi 18 décembre 2004StatutNon membreDernière intervention25 avril 202411 22 nov. 2009 à 13:33
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.
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 22 nov. 2009 à 00:20
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.
7 déc. 2009 à 13:48
de : 5/2477 , 5/2557 , 5/2663 et 5/2999
dont je voulais parler ci-dessus. Désolé, pgl10
7 déc. 2009 à 11:53
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 ?
23 nov. 2009 à 11:59
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.
22 nov. 2009 à 13:33
22 nov. 2009 à 00:20
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.