0

私が C で書いた単純なプログラムは、実行に 30 分以上かかります。C の実行に非常に時間がかかることに驚いています。なぜなら、インターネットで見つけたものによると、C ( C++ や Java は別として) はより高速な言語の 1 つだからです。

// this is a program to find the first triangular number that is divisible by 500 factors

int main()
{
    int a; // for triangular num loop
    int b = 1; // limit for triangular num (1+2+3+......+b)
    int c; // factor counter
    int d; // divisor
    int e = 1; // ends loop
    long long int t = 0; // triangular number in use

    while( e != 0 )
    {   
        c = 0;

        // create triangular number t
        t = t + b;
        b++;

        // printf("%lld\n", t); // in case you want to see where it's at
        // counts factors
        for( d = 1 ; d != t ; d++ )
        {       
            if( t % d == 0 )
            {
                c++;
            }       
        }

        // test to see if condition is met
        if( c > 500 )
        {
            break;  
        }
    }

    printf("%lld is the first triangular number with more than 500 factors\n", t);

    getchar();
    return 0;
}

確かに、プログラムは大量のデータを処理しますが、どれも保存されず、テストされて渡されただけです。

Windows 8 で Tiny C コンパイラを使用しています。

これが非常にゆっくりと実行される理由はありますか? 同じ結果を達成するためのより速い方法は何でしょうか?

ありがとうございました!

4

5 に答える 5

1

数学分析なし:

  ...

  do 
  {   
    c = 0;
    t += b;
    b++;

    for (d = 1; d < t; ++d)
    {       
      if (!(t % d))
      {
        c++;
      }       
    }
  } while (c <= 500);

  ...
于 2013-08-17T19:01:11.940 に答える
0

無駄な操作をされていますが、簡単に確認できればその指示は不要だと思います。

最初 :

while(e!=0)

あなたが宣言したように、ループにe=1のみ入れると機能します。どこ1の値も更新していません。e

それを変更して、正常に動作するかどうかを確認します。

于 2013-08-17T19:00:06.023 に答える