素数搜索中的 C++ 数组

标签 c++ arrays

所以我试图回答一个关于 Project Euler 的问题(问题是:找到 10,001 质数),并遇到了一个我不知道为什么会发生的问题。当我运行以下 C++ 代码时,

#include <iostream>
using namespace std;


int main()
{
    int arr[10001]={2}, term=1, i, num=3;
     while(term!=10001)
    {
        for(i=0; i<term; i++)
        {
            if(num%arr[i]==0){
                break;
            }
        }
        if(i==term){
            arr[term]=num;
            cout<< arr[term]<< " is prime"<< endl;
            term++;
        }
        num++;
    }
    cout<< arr[term]<< endl;
}

我总是得到 cout<< arr[term]<< endl;打印出任何内容n++; (在这种情况下是下一个数字,但如果我将其更改为 n=856,那么它将打印出该数字)。我不明白为什么那个数组项会改变,因为我认为它只会在 arr[term]=num; 时改变。被执行

最佳答案

您的代码有 undefined behaviour 因为您正在访问其边界之外的数组。

当循环中断时,term 的值为 10001,这是数组 arr 的第 10002 个元素,而您的数组内存已分配仅适用于 10001 元素。

要打印数组的最后一个元素,请执行:

cout<< arr[term - 1]<< endl;

关于素数搜索中的 C++ 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28392327/

相关文章:

java - 拼出时间

C++ 模板类型在 typedef 工作的地方中断

c# - 检查字节数组是否仅包含 1 个值的最快方法

java - 2D Java 数组值与我的意图不相关

javascript - php - 将数组从 php 传递到 jquery ajax,然后再次将相同的数组从 jquery 传递到 php

c++ - C++ 性能技术报告 TR 18015 中使用了哪些实现?

c++ - 为什么这些代码仍然使用左值函数?

c++ - OpenGL Additive混合导致白屏

javascript - 如何传递数组并在 React Lifecycle 中访问它

java - foreach 和 for 循环将重复记录复制到数组中