簡體   English   中英

質數生成器怎么了?

[英]What's wrong with the prime number generator?

我寫了一個代碼。 目的是找到最大為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");
}
}

比較:

i/ii==floor(i/ii)

總是對的,因為您正在執行整數除法。 iii都是整數,因此C ++在計算i/ii時會進行整數除法。

不要做整數除法,而是做模數並檢查余數是否為0。

1)使用vector<int>而不是普通數組來為您處理數組分配和大小內務處理,並且使用一些不同的語法,您可以大致實現所需的功能。

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

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

我生成直到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不計算在內。

您還可以使用它們自己的值初始化所有lowestFactor,並在訪問數字時將其大小設置為N-1減去2。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM