为什么我的Eratosthenes筛子给出了一些复合数?

时间:2013-08-05 08:45:35

标签: c++ primes sieve-of-eratosthenes

因此,在运行我对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;
}

1 个答案:

答案 0 :(得分:0)

因为您正在检查i < m而不是i <= m,所以您永远不会检查9的平方根,25等。
变化

for(int i = 2; i<m; i++)

for(int i = 2; i<=m; i++)