Violent solution; Integers are 10,000 times easier to use than floating point numbers
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)
Violence, algorithmically it should only be violent. But there are many ways to use violence.
After multiplying both sides (pqrs), we get $$ qrs+prs+pqs+pqr=pqrs $$. After $$, we can brute force three of them and calculate the fourth one.
Arrange the above formula and get $$ ps(q+r)+qr(p+s)=pqrs $$ $$ qr(p+s)=ps[qr-(q+r)] $$ $$ frac{p+s}{ps}=frac{qr-(q+r)}{qr} $$
In this way, you only need to violence two of them, and write down the results during the violence, and check the table each time to see if the value calculated this time has appeared before.
I also think of violent solutions, but I have a new discovery.
1/p+1/q+1/r+1/s=1 and p<=q<=r<=s, we can get that p is the largest when p=q=r=s, 4/p>=1, Then p<=4, then the maximum value in the loop is determined. The maximum value of the for loop is 4, and values larger than 4 do not need to be considered. In the same way, we can deduce q<=6, r<=12, s<=42, which can reduce the scope of the for loop.
It should be that every time x (x=1) on the right side of the equation is determined, a maximum and minimum value of p can be determined. Every time p is determined (when looping), a maximum and minimum value of q can be determined. The same goes for r and s.
However, I haven’t been able to express the rules of 4, 6, 12, and 42 with formulas. There should be some formula algorithm that can be applied to 1/p+1/q+1/r+1/s+1/. ..=x.
Violent solution;
Integers are 10,000 times easier to use than floating point numbers
Violence, algorithmically it should only be violent.
But there are many ways to use violence.
After multiplying both sides (pqrs), we get $$ qrs+prs+pqs+pqr=pqrs $$. After $$, we can brute force three of them and calculate the fourth one.
Arrange the above formula and get $$ ps(q+r)+qr(p+s)=pqrs $$ $$ qr(p+s)=ps[qr-(q+r)] $$
$$ frac{p+s}{ps}=frac{qr-(q+r)}{qr} $$
In this way, you only need to violence two of them, and write down the results during the violence, and check the table each time to see if the value calculated this time has appeared before.
If you only want one solution, then
p=q=r=s=4
is fine!Questions I answered: Python-QA
I also think of violent solutions, but I have a new discovery.
1/p+1/q+1/r+1/s=1 and p<=q<=r<=s, we can get that p is the largest when p=q=r=s, 4/p>=1, Then p<=4, then the maximum value in the loop is determined. The maximum value of the for loop is 4, and values larger than 4 do not need to be considered. In the same way, we can deduce q<=6, r<=12, s<=42, which can reduce the scope of the for loop.
It should be that every time x (x=1) on the right side of the equation is determined, a maximum and minimum value of p can be determined.
Every time p is determined (when looping), a maximum and minimum value of q can be determined.
The same goes for r and s.
However, I haven’t been able to express the rules of 4, 6, 12, and 42 with formulas. There should be some formula algorithm that can be applied to 1/p+1/q+1/r+1/s+1/. ..=x.