0

最初の 50 個の「チリアド」の素数を計算して表示するプログラムを作成しようとしています。2 つのユーザー定義関数「isPrime」と「primeCount」が必要です。「primeCount」がすべてのカウントに 4469969 を追加しているようです。メイン関数に貼り付けると、それは行われません。

int main (){
     long x = 1;
     long y = 1000;
     char reply;   

     cout << "Start   End    Number of Primes" << endl;

    while (y <= 50000)
    {
      cout << x << " " << y << " ";
      cout << primeCount(x, y) << endl;
      x = 1000 + x;
      y = 1000 + y;          
     }

    //exits the program                     
    cout << "Enter q to quit... ";
    cin >> reply;
    return 0;
}// End main function
bool isPrime(long n)
{
 long i = 2;

 if (n == 1)
    return false;
 if (n == 2) 
       return true;
 if (n == 3)
       return true;
 if ((n % 2) == 0)
        return false;
 if ((n % 3) == 0)
        return false;

 while (i < n) 
 {
     if (n % i == 0 )
     {
        return false;
     }
     else 
     {
          i++;
     }      
 }
return true;
}
long primeCount (long x, long y)
{
  long count = 0;
  while (x < y)
  {
      if (isPrime(x) == 1)
      {
         count++;
      }
  x++;  
  }
cout << count;
}
4

1 に答える 1

1

印刷していた「primeCount」から値を返していませんでした。

いくつかの最適化とともに、次のようにコードをクリーンアップしました (候補が奇数であることを証明するため、偶数の約数をチェックする必要はありません。数値が偶数であることが既にわかっている場合にのみ、2 の値をチェックします。奇数ごとに 1 つの余分なテストを節約できます)。

#include <iostream>

// prototypes for functions we implement after we use them.
long primeCount(long x, long y);
bool isPrime(long n);

int main (){
    long x = 1;
    long y = 1000;

    std::cout << "Start   End    Number of Primes" << std::endl;

    while (y <= 50000)
    {
        std::cout << x << " " << y << " ";
        std::cout << primeCount(x, y) << std::endl;
        x += 1000;
        y += 1000;
    }

    return 0;
}

bool isPrime(long n)
{
    if((n & 1) == 0) // even
       return (n == 2);
    if(n == 1)
        return false;
    for (long i = 3; i < n / 2; i += 2)
    {
        if ((n % i) == 0 )
            return false;
    }
    return true;
}

long primeCount(long x, long y)
{
    long count = 0;
    while (x < y)
    {
        if (isPrime(x))
            count++;
        ++x;
    }

    return count;
}
于 2013-10-31T23:00:15.803 に答える