c++ - 为什么我的代码说 109 不是素数?

标签 c++

我正在尝试生成素数,我几乎让它工作了,但出于某种原因,当 109 是素数时,它显示 109 不是素数。

因此,当我输出 factorCount 时,它显示“113::29”,因为 113 是第 30 个质因数,因为它是 107 而不是 109。

#include <iostream>

using namespace std;

void mark(bool arr[], int a, int n){
    int i = 2;
    int num = 0;

    while((num = i*a) <= n){
        arr[num-1] = 1;
        i++;
    }
}

void sieve(int n){

    int primeCount = 0;

    if(n >= 2){
        bool arr[n];

        for(int i=1; i<n; i++){
            if(arr[i] == 0){
                primeCount++;
                cout << i+1 << " :: " << primeCount << endl;

                mark(arr, i+1, n);
            }
        }
    }
}

int main(){

    int n = 120;

    sieve(n);

    return 0;
}

最佳答案

您的代码使用了未初始化的变量:

bool arr[n];

for(int i=1; i<n; i++){
    if(arr[i] == 0){      // <--- here

您检查 arr[i] 的值当你没有将它设置为任何东西时。

此外,bool arr[n];在 C++ 中是非法的,尽管一些编译器将其添加为扩展。在标准 C++ 中,数组边界必须在编译时已知。要修复它,请更改 bool arr[n];到:

std::vector<unsigned char> arr(n);  // note: parentheses, not square brackets

此版本将对成员进行零初始化。遗憾vector<bool>不会在这里工作,因为它有一个奇怪的特化。您需要通过 &arr[0]mark , 而不仅仅是 arr .

关于c++ - 为什么我的代码说 109 不是素数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26598321/

相关文章:

C++开始和结束不工作

c++ - 在控制台中输入什么来触发流结束?

c++ - 为此 directshow 系统创建一个自定义类,无法弄清楚如何

c++ - 有人可以解释为什么我在这里收到 fatal error C1202 以及如何解决它吗?

c++ - Windbg 语法 - 将两个命令(MASM 和 C++)合二为一

c++ - 具有空洞初始化的对象的生命周期

c++ - 构造函数名称前的关键字 struct

c++ - 使用正在创建的实例调用复制构造函数

c++ - QUiLoader 从 QWidget* 转换为 QDialog*,可能吗?

c++ - 如何在 cython 中将 unordered_map 从 c struct 转换为 int?