2013-10-31 36 views
0

我正在編寫程序來計算並顯示前50個「辣椒」中素數的數量。必須有2個用戶定義的函數「isPrime」和「primeCount」。看起來「primeCount」在每個計數上都追加4469969。當我將它粘貼到主函數中時,它並沒有這樣做。用戶定義的函數在C++中返回錯誤的計數

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; 
} 
+3

你的函數'primeCount()'不返回任何東西,它有一個'cout'語句。另外,你的'isPrime()'返回一個'bool',但你將這個值與'1'比較。 – chrisaycock

+0

難道你不想在'primeCount'中返回'count'而不是輸出值嗎? – Ares

+0

您正在使用cout << primeCount(x,y)<< endl;但它不會返回真正的primeCount值。 –

回答

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; 
} 
+0

據我所知1不是質數:) –

+0

@VladfromMoscow重新排序和糾正 - 每次沒有點檢查1,因爲它將無法檢查一半的數字是無效的:) – kfsone

相關問題