Quelqu'un pourrait m'aider à résoudre une équation de ce type 210a +180b + 160c + 120d = 25000
Afin de trouver les différentes solutions pour a b c et d, les cours de math sont loin derrière moi et je galère un peu je ne sais même pas si cela est possible...
Sans plus de détails, il existe une infinité de solutions. Connais-tu des conditions sur \((a, b, c, d)\) (par exemple, \(a = 2b\) ou \(a \ge 0\)) qui peuvent nous aider à limiter le nombre de solutions ?
Les conditions pour limiter le nombre de solution seraient qu'il faut un maximum de a puis de b ainsi de suite par ordre décroissant même si c=0 ou d=0. a b c et d sont toujours ≥0
A partir du moment où tu ajoutes cette contrainte : que des nombres entiers, il n'y a pas de méthode miracle. Il faut passer par de la programmation, faire des boucles, tester plein de cas.
Petit exemple de galère sur tes données. Tu as comme coefficients 210, 180, 160 et 120 ; il se trouve que 210, 180 et 120 sont des multiples de 30, donc tout nombre de la forme 210a+180b+120d est un multiple de 30. Or, 25000 n'est pas un multiple de 30.
Par contre 25000-160 est bien un multiple de 30. Donc en prenant c=1, on a de bonnes chances de trouver une solution.
25000-160, ça donne 24840.
24840 divisé par 210, ça donne un petit peu plus que 218
24840-118*210 , ça donne 60, aucune façon de faire 60 en additionnant des 120, des 160 et des 180
24840-117*210, ça donne 270 ; idem, c'est une impasse.
Mais avec a=116, on trouve une solution : 25000 = 116*210+0*180+4*160+0*120
Merci pour ta réponse c'est bien ce que je pensai je vais aller sur le forum Excel pour voir si quelqu’un peut m'aider dans ce sens-là, je sais que le Vba va faire mon bonheur mais je l'ai très peu utilisé et je vais avoir besoin d'aide, je passe en résolu.
Dans Excel, le SOLVER doit pouvoir faire ça. Tu lui donnes tes contraintes (les 4 nombres doivent être des entiers, ils doivent être positifs, et 210*a+180*b+160*c+120*d doit être égal à 25000), tu lui donnes ton objectif , et tu cliques sur Résoudre. Pas besoin de coder quoi que ce soit en VBA.
Ici ton objectif n°1, c'est que a soit le plus grand possible. Mais tu as aussi un objectif n°2, que b soit le plus grand possible. Et le solver ne sait gérer qu'un objectif.
Ce que tu peux faire, c'est dire que tu veux la solution qui donne la plus grande valeur possible pour c+100*b+10000*a ; avec des coefficients comme ceux que tu as ( grosso modo le même ordre de grandeur pour 210, 180 160 et 120), ça te donnera la bonne solution.
On peut diviser tout par 10 : 21a + 18b + 16c + 12d = 2500. De plus, si les solutions doivent être des nombres entiers naturels, alors forcément on aura a < 120, b < 139, etc. (en divisant 2500 par le coefficient devant chaque inconnue). Le nombre de possibilités est donc assez restreint et peut se calculer avec un petit programme (ici il y a 120×139×157×209 = un demi milliard de possibilités, ça ne devrait pas tourner pendant des heures).
Du coup, parce que je trouve que c'est un petit exercice amusant, j'ai écrit un petit programme en C :
/* Résolution d'une équation mA + nB + pC + qD = r */
/* − coefficients m, n, p, q, r entiers naturels */
/* − inconnues A, B, C, D entiers naturels */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int m, n, p, q, r ; // coefficients
int amax, bmax, cmax, dmax ; // bornes sup des inconnues
int compteur = 0 ;
/* Saisie des coefficients */
printf("Équation mA + nB + pC + qD = r\n") ;
printf("\tEntrer les coefficients :\n") ;
do { printf("\tm = ") ; scanf("%d", &m) ; } while (m <= 0) ;
do { printf("\tn = ") ; scanf("%d", &n) ; } while (n <= 0) ;
do { printf("\tp = ") ; scanf("%d", &p) ; } while (p <= 0) ;
do { printf("\tq = ") ; scanf("%d", &q) ; } while (q <= 0) ;
do { printf("\tr = ") ; scanf("%d", &r) ; } while (r <= 0) ;
/* Calcul des bornes */
amax = r/m ;
bmax = r/n ;
cmax = r/p ;
dmax = r/q ;
/* Test de toutes les possibilités */
/* (On effectue un parcours décroissant afin de trouver le plus grand
a possible, puis le plus grand b possible et ainsi de suite. */
for (int a = amax ; a > 0 ; a--)
for (int b = bmax ; b > 0 ; b--)
for (int c = cmax ; c > 0 ; c--)
for (int d = dmax ; d > 0 ; d--)
if (m*a + n*b + p*c + q*d == r)
{
compteur++ ;
printf("%d : %d.%d + %d.%d + %d.%d + %d.%d = %d\n",
compteur, m, a, n, b, p, c, q, d, r) ;
}
printf("%d solutions trouvées.\n", compteur) ;
return EXIT_SUCCESS ;
}
En environ 2 secondes, il trouve 34.690 solutions. Voici les dix premières (celles où a est le plus grand, puis b...) :
Tu as pris comme conditions : a b c d sont des entiers strictement positifs.
Dans son 2ème message, Bob disait que la valeur 0 était acceptée. Donc un petit peu plus de solutions (allez, je parie sur 1500 solutions supplémentaires, à 150 près).
grrrr, Au début, je tablais sur 10000, puis j'ai réévalué à la baisse jusqu'à 1500. Vraiment pas bon sur ce coup.
Equation
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Mon portfolio photo : https://www.instagram.com/charlievanaret_photo/