Solution violente ; Les nombres entiers sont 10 000 fois plus faciles à utiliser que les nombres à virgule flottante
for p in range(1,100):
for q in range(p,100):
for r in range(q,100):
for s in range(r,100):
if p * q * r + p * q * s + p * r * s + q * r * s == p * q * r * s:
print(p,q,r,s)
La violence, algorithmiquement elle ne devrait être que violente. Mais il existe de nombreuses façons d’utiliser la violence.
Après avoir multiplié les deux côtés (pqrs), vous obtenez $$ qrs+prs+pqs+pqr=pqrs $$, vous pouvez en forcer trois et calculer le quatrième.
Organisez la formule ci-dessus pour obtenir $$ ps(q+r)+qr(p+s)=pqrs $$ $$ qr(p+s)=ps[qr-(q+r )] $$ $$ frac{p+s}{ps}=frac{qr-(q+r)}{qr} $$
De cette façon, il vous suffit d'en forcer deux, d'écrire les résultats pendant le processus de force brute, et de vérifier le tableau à chaque fois pour voir si la valeur calculée cette fois est apparue auparavant.
Je pense aussi à des solutions violentes, mais j'ai une nouvelle découverte.
1/p+1/q+1/r+1/s=1 et p<=q<=r<=s, on peut obtenir p=q=r=s lorsque p est le plus grand, 4/ p>= 1, puis p<=4, puis la valeur maximale dans la boucle est déterminée. La valeur maximale de la boucle for est 4 et les valeurs supérieures à 4 n'ont pas besoin d'être prises en compte. De la même manière, on peut en déduire q<=6, r<=12, s<=42, ce qui peut réduire la portée de la boucle for.
Il devrait être que chaque fois que x (x=1) sur le côté droit de l'équation est déterminé, une valeur maximale et minimale de p peut être déterminée. Chaque fois que p est déterminé (lors d'une boucle), une valeur maximale et minimale de q peut être déterminée. Il en va de même pour r et s.
Cependant, je n'ai pas pu exprimer les règles de 4, 6, 12 et 42 avec des formules. Il devrait y avoir un algorithme de formule pouvant être appliqué à 1/p+1/q+1/r+. 1/s+1 /...=x.
Solution violente ;
Les nombres entiers sont 10 000 fois plus faciles à utiliser que les nombres à virgule flottante
La violence, algorithmiquement elle ne devrait être que violente.
Mais il existe de nombreuses façons d’utiliser la violence.
Après avoir multiplié les deux côtés (pqrs), vous obtenez $$ qrs+prs+pqs+pqr=pqrs $$, vous pouvez en forcer trois et calculer le quatrième.
Organisez la formule ci-dessus pour obtenir $$ ps(q+r)+qr(p+s)=pqrs $$ $$ qr(p+s)=ps[qr-(q+r )] $$
$$ frac{p+s}{ps}=frac{qr-(q+r)}{qr} $$
De cette façon, il vous suffit d'en forcer deux, d'écrire les résultats pendant le processus de force brute, et de vérifier le tableau à chaque fois pour voir si la valeur calculée cette fois est apparue auparavant.
Si vous ne voulez qu'une seule solution, alors
p=q=r=s=4
c'est très bien !Questions auxquelles j'ai répondu : Python-QA
Je pense aussi à des solutions violentes, mais j'ai une nouvelle découverte.
1/p+1/q+1/r+1/s=1 et p<=q<=r<=s, on peut obtenir p=q=r=s lorsque p est le plus grand, 4/ p>= 1, puis p<=4, puis la valeur maximale dans la boucle est déterminée. La valeur maximale de la boucle for est 4 et les valeurs supérieures à 4 n'ont pas besoin d'être prises en compte. De la même manière, on peut en déduire q<=6, r<=12, s<=42, ce qui peut réduire la portée de la boucle for.
Il devrait être que chaque fois que x (x=1) sur le côté droit de l'équation est déterminé, une valeur maximale et minimale de p peut être déterminée.
Chaque fois que p est déterminé (lors d'une boucle), une valeur maximale et minimale de q peut être déterminée.
Il en va de même pour r et s.
Cependant, je n'ai pas pu exprimer les règles de 4, 6, 12 et 42 avec des formules. Il devrait y avoir un algorithme de formule pouvant être appliqué à 1/p+1/q+1/r+. 1/s+1 /...=x.