1

このプログラムの目標は、ユークリッドの公式 (a = m^2 -n^2, b = 2mn, c = m^2 + n^ 2.) これが私のコードです。

int main()
{
    clock_t start = clock()/ (CLOCKS_PER_SEC/1000);

    for (int m = 1; m <= 500; m++)
    {

        for (int n = 1; n <= 500; n++)
        {

            int a = (m*m)-(n*n);
            int b = 2*m*n;
            int c = (m*m)+(n*n);
            if (m > n && a + b == c)
            {
                cout << a << " + " << b << " = " << c << endl;
            }
        }
    }
    clock_t finish = clock()/ (CLOCKS_PER_SEC/1000);
cout << "completed in " <<clock() << " ms";
    return 0;
}

私はこれを試しましたが、私の出力は何もありません。私がそれがうまくいくと思った方法は次のとおりです。500以下の整数mごとに、1から始まり、毎回mに1を追加します。n についても同じです。次に、これらの値を数式に挿入し、a+b == c の場合、それらの値を出力して、トリプルを見つけます。しかし、私は何の出力も得ていません。

4

4 に答える 4

3
a + b = (m^2 + 2mn - n^2) = (m+n)^2 - 2n^2
c = m^2 + n^2 = (m+n)^2 - 2mn

必須a + b = c

--> 2n^2 = 2mn
--> m = n

も必要なm > nため、解決策を見つけることができません。

于 2014-02-20T16:01:30.833 に答える
0

あなたの状態は間違っています: あなたは取得しようとしています

(m^2 - n^2) + 2mn = (m^2 + n^2)

(m - n)^2 = m^2 + n^2

ただし、常に次の厳密な不等式があるためn > 0です。

(m - n)^2 < m^2 < m^2 + n^2

ウィキペディアによると、二乗和が等しいかどうかを確認したかった-

(a^2 + b^2) == c^2

于 2014-02-20T16:04:28.377 に答える
0

実装でいくつかの間違いを犯しました (以下の修正を参照)。

int main()
{
    for (int n = 1; n <= 500; ++n) // note the swap for the loops
    {
        for (int m = n + 1; m <= 500 && (m*m + n*n) <= 500; ++m) // note that m starts at n + 1
        {
            int a = (m*m)-(n*n);
            int b = 2*m*n;
            int c = (m*m)+(n*n);
            // Euclid already proved this, so there is no need to test it.
            std::cout << a << " + " << b << " = " << c << std::endl;
        }
    }
    return 0;
}
  1. ユークリッドの公式m > nには が必要なので、その基準を満たさない値をチェックする必要はありません
  2. とにかくあなたのテスト(a + b) == cは決してうまくいきません。式はa^2 + b^2 = c^2- という意味ではありませんa + b = c
于 2014-02-20T16:06:10.133 に答える
0

私は問題を理解しました。プログラムの最後の反復では、c を <= 500 に制限する必要があります。

int main()
{
    clock_t start = clock()/ (CLOCKS_PER_SEC/1000);

    for (int n = 1; n <= 500; n++)
    {
        for (int m = n+1; m <= 500; m++)
        {
            int a = (m*m)-(n*n);
            int b = 2*m*n;
            int c = (m*m)+(n*n);
            if ((a*a) + (b*b) == (c*c) && c <= 500)
            {
                cout << a << " + " << b << " = " << c << endl;
            }
        }
    }
    clock_t finish = clock()/ (CLOCKS_PER_SEC/1000);
cout << "completed in " <<clock() << " ms";
    return 0;
}

そうすれば、私が問題を抱えていたように、プログラムは長くは続きません。皆さん、ありがとうございました!

于 2014-02-20T16:33:22.437 に答える