因此,在运行我对Eratosthenes筛选器的实现之后,在某些情况下,它还给出了复合数字。
例如
当数字限制为10时,我也会得到2,3,5,7和9。
当限制为30时,我得到25和素数。
这是为什么?我的代码是:
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
long long n;
int main()
{
cout << "Till what number to find primes of?" << endl;
cin >> n;
int m = sqrt(n);
vector<bool> prime(n+1, true);
for(int i = 2; i<m; i++)
{
if(prime[i])
{
for(int k=i*i; k<=n; k=k+i)
{
prime[k] = false;
}
}
}
for(int j=2; j<=n; j++)
{
if(prime[j])
{
cout << j << endl;
}
}
return 0;
}
答案 0 :(得分:0)
因为您正在检查i < m
而不是i <= m
,所以您永远不会检查9的平方根,25等。
变化
for(int i = 2; i<m; i++)
到
for(int i = 2; i<=m; i++)