#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");
}
}
答案 0 :(得分:0)
这个比较:
i/ii==floor(i/ii)
总是如此,因为你正在进行整数除法。 i
和ii
都是整数,因此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