素数发生器有什么问题?

时间:2011-01-19 10:06:02

标签: c++ primes

我写了一段代码。目标是找到高达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");
}
}

4 个答案:

答案 0 :(得分:0)

这个比较:

i/ii==floor(i/ii)

总是如此,因为你正在进行整数除法。 iii都是整数,因此C ++在计算i/ii时会执行整数除法。

答案 1 :(得分:0)

不要做整数除法而是做模数并检查余数是否为0。

答案 2 :(得分:0)

1)使用vector<int>而不是普通数组来处理数组分配和大小管理,并且使用一些不同的语法可以实现您想要的大致。

2)测试i/ii==floor(i/ii)很糟糕。使用浮点除法或(更好)模数运算符。

3)if (prime==true) - 这是另一种典型的缺乏理解的构造。

答案 3 :(得分: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不计算。

您也可以使用自己的值初始化所有最低级因素,并且可以在访问数字时将其大小设置为N-1减去2