検索

ホームページ  >  に質問  >  本文

python - 求这样的4个自然数p、q、r、s(p<=q<=r<=s),使得一下等式成立:1/p+1/q+1/r+1/s=1。

PHP中文网PHP中文网2803日前1218

全員に返信(4)返信します

  • 怪我咯

    怪我咯2017-04-18 09:29:36

    暴力的な解決策;
    整数は浮動小数点数よりも 10,000 倍使いやすいです

    リーリー

    返事
    0
  • 天蓬老师

    天蓬老师2017-04-18 09:29:36

    暴力、アルゴリズム的には暴力のみであるべきです。
    しかし、暴力を行使する方法はたくさんあります。

    1. 両辺 (pqrs) を乗算すると、$$ qrs+prs+pqs+pqr=pqrs $$ が得られます。そのうち 3 つをブルート フォースして 4 つ目を計算できます。

    2. 上記の式を整理すると、 $$ ps(q+r)+qr(p+s)=pqrs $$ $$ qr(p+s)=ps[qr-(q+r )] となります。 $$
      $$ frac{p+s}{ps}=frac{qr-(q+r)}{qr} $$

    この方法では、そのうちの 2 つを総当たりで実行するだけで済み、総当たり処理中の結果を書き留めて、今回計算された値が以前に出現したかどうかを毎回テーブルで確認します。

    返事
    0
  • ringa_lee

    ringa_lee2017-04-18 09:29:36

    解決策が 1 つだけ必要な場合は、p=q=r=s=4 で問題ありません!


    私が回答した質問: Python-QA

    返事
    0
  • 高洛峰

    高洛峰2017-04-18 09:29:36

    私も暴力的な解決策を考えますが、新たな発見がありました。

    1/p+1/q+1/r+1/s=1 および p<=q<=r<=s、p=q=r=s、4 のときに p が最大であることがわかります。 /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。

    返事
    0
  • キャンセル返事