首页 > 解决方案 > 如何正确识别具有布尔值的动态数组?

问题描述

这段代码是为了找到一定范围内的素数。我使用了 Eratosthenes 的算法。似乎我的动态数组的范围是错误的。因为当我输入 50 时,49 在素数集中,当我输入 30 时,25 仍在素数集中。

我已经检查了 for 循环。应该没有问题。

void Eratosthenes(int n)
{
    bool* prime;
    prime = new bool[n+1];
    memset(prime, true, sizeof(prime));

    for (int p = 2; p * p <= n; p++)
    {
        if (prime[p] == true)
        {
            for (int i = p * p; i <= n; i += p)
                prime[i] = false;
        }
    }
    for (int p = 2; p <= n; p++)
        if (prime[p])
            cout << p << " ";
    delete[] prime;
}
int main()
{
    int n;
    cout << "enter a interger " << endl;
    cin >> n;
    Eratosthenes(n);
    return 0;
}

标签: c++dynamic-arrays

解决方案


您可能需要更正应初始化的元素数量:

memset(prime, true, sizeof(*prime)*(n+1));

推荐阅读