2011-01-19 68 views
0

我寫了一段代碼。目標是找到質量最高達1000的素數。它編譯並運行,但似乎表格最後是空白的。這是什麼原因?我如何解決它?謝謝。素數生成器有什麼問題?

#include <iostream> 
#include <cmath> 
#include <fstream> 
using namespace std; 



int primes[20]; 
bool prime; 
int main() 
{ 
    int i; 
for(i=2;i<=1000;i++){ 
prime=true; 
int ii; 
    for (ii=1;ii<=sizeof(primes);ii++){ 
     if (i/ii==floor(i/ii)){ 
          prime=false; 
          } 
     } 
     if (prime==true){ 
     primes[sizeof(primes+1)]=i; 
    }   
} 
for (i=1;i<=20;i++){ 
cout << primes[i] << endl; 
system("pause"); 
} 
} 
+1

假設這是功課,下面是一些提示:你認爲是什麼'的sizeof `是嗎?這條線做什麼:`primes [sizeof(primes + 1)] = i;`? (哦,你也可能想修復你的格式 - 太難讀取代碼了。) – 2011-01-19 10:09:15

回答

0

這種比較:

i/ii==floor(i/ii) 

總是正確的,因爲你正在做的整數除法。 iii都是整數,因此C++在計算i/ii時會進行整數除法。

0

不要做整數除法,而不是做模量,並檢查其餘的是否爲0

0

1)使用vector<int>而不是純數組處理數組分配和大小家政你,並且以位不同的語法你可以達到你想要的水平。

2)測試i/ii==floor(i/ii)不好。使用浮點除法或(更好)模數運算符。

3)if (prime==true) - 這是另一個典型的構造,顯示缺乏理解。

0

我生成所有數字多達N種方式如下:

std::vector<int> lowestFactors(N+1, 1); 
for(int n = 2; n * n <= N; ++n) 
{ 
    if(lowestFactors[ n ] != 1) 
     continue; // our number is not prime 

    for(int m = n; m * n <= N; ++m) 
    { 
     if(lowestFactors[ m ] != 1 && lowestFactors[m] != n) 
      continue; 

     lowestFactors[m * n ] = n; 
    } 
} 

每個單元格現在將包含在lowestFactors: - 如果不是質數的最低因素 - 1,如果它是一個素數 。 - 0和1不計數。

您也可以初始化所有lowestFactors與自己的價值觀,並能它的大小N-1減2,當你訪問了一些