认证高级PHP讲师
暴力解决;整数比浮点数好用一万倍
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)
暴力,算法上应该是只能暴力的。但是暴力的方法是有蛮多种的。
两边同乘(pqrs)之后,得到$$ qrs+prs+pqs+pqr=pqrs $$之后,可以暴力其中的三个,计算出第四个。
把上面的式子整理,得到 $$ ps(q+r)+qr(p+s)=pqrs $$ $$ qr(p+s)=ps[qr-(q+r)] $$ $$ frac{p+s}{ps}=frac{qr-(q+r)}{qr} $$
这样只要暴力其中的两个,并且在暴力的过程中把结果记下来,每次查表看一下这次算出来的值以前有没有出现过就可以了。
只求一个解的话那就 p=q=r=s=4 就好啦!
p=q=r=s=4
我回答过的问题: Python-QA
我也是暴力解决的思路,不过我有个新发现。
1/p+1/q+1/r+1/s=1且p<=q<=r<=s,能得到p=q=r=s时p最大,4/p>=1,则p<=4,那么循环中的最大值就确定了,for循环的最大值就是4,比4大的数值就都不用考虑。同理就能推出q<=6、r<=12、s<=42,能缩小for循环的范围。
应该是,每确定一个等式右边的x(x=1),就能确定一个p的最大值和最小值。每确定一个p(循环时),都能确定一个q的最大值和最小值。同理r和s。
然而4、6、12、42这个规律我还没能用公式表达出来,应该是有什么公式算法的,可以适用于1/p+1/q+1/r+1/s+1/...=x。
暴力解决;
整数比浮点数好用一万倍
暴力,算法上应该是只能暴力的。
但是暴力的方法是有蛮多种的。
两边同乘(pqrs)之后,得到$$ qrs+prs+pqs+pqr=pqrs $$之后,可以暴力其中的三个,计算出第四个。
把上面的式子整理,得到 $$ ps(q+r)+qr(p+s)=pqrs $$ $$ qr(p+s)=ps[qr-(q+r)] $$
$$ frac{p+s}{ps}=frac{qr-(q+r)}{qr} $$
这样只要暴力其中的两个,并且在暴力的过程中把结果记下来,每次查表看一下这次算出来的值以前有没有出现过就可以了。
只求一个解的话那就
p=q=r=s=4
就好啦!我回答过的问题: Python-QA
我也是暴力解决的思路,不过我有个新发现。
1/p+1/q+1/r+1/s=1且p<=q<=r<=s,能得到p=q=r=s时p最大,4/p>=1,则p<=4,那么循环中的最大值就确定了,for循环的最大值就是4,比4大的数值就都不用考虑。同理就能推出q<=6、r<=12、s<=42,能缩小for循环的范围。
应该是,每确定一个等式右边的x(x=1),就能确定一个p的最大值和最小值。
每确定一个p(循环时),都能确定一个q的最大值和最小值。
同理r和s。
然而4、6、12、42这个规律我还没能用公式表达出来,应该是有什么公式算法的,可以适用于1/p+1/q+1/r+1/s+1/...=x。