gpt4 book ai didi

c++ - 运行时错误,使我的 .exe 崩溃,我不确定为什么

转载 作者:太空宇宙 更新时间:2023-11-03 10:33:44 24 4
gpt4 key购买 nike

我可以猜测它与使用 unsigned long long int 有关。

#include <cstdlib>
#include <iostream>
#include <cmath>

using namespace std;

typedef unsigned long long int uint64;

int main(int argc, char *argv[])
{



uint64 number_in_question = 600851475143LL;

long double sqrt_in_question = sqrt(number_in_question);
bool primes_array[number_in_question+1];



for (uint64 i = 0; i <= number_in_question; i++) {
primes_array[i] = true;
}

for (uint64 i = 2; i <= sqrt_in_question; i++) {
if(primes_array[i] == true) {
// for every multiple of this prime, mark it as not prime
for (uint64 ii = i*2; ii <= number_in_question; ii += i) {
primes_array[ii] = false;
}
}
}

for (uint64 i = 0; i <= number_in_question; i++) {
if(primes_array[i] == true)
cout << i << ", ";
}


system("PAUSE");


return EXIT_SUCCESS;
}

编辑1:我正在尝试做的一些背景:

我正在尝试模仿这种技术:http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes当我使用一个数组来存储一个简单的“它是素数吗”时,1 表示是,0 表示否。最终目标是解决这个问题:

数 600851475143 的最大质因数是多少? 此处列出:http://projecteuler.net/problem=3 .我只是在研究素数,然后会研究素数因子。

编辑2:

在查看我发布的维基百科链接后,我意识到他们有 puesdocode(跳过它并想出了我所拥有的)并意识到有这个注释:大范围可能无法完全放入内存中。在这些情况下,有必要使用分段筛,一次只筛分范围的一部分。 [14]对于大到无法将筛分素数保存在内存中的范围,可以使用像 Sorenson 这样的节省空间的筛子。因此,我将不得不想办法使用“分段筛”方法来做到这一点。

编辑3:

更改了数组以考虑 [0] 元素,因此“问题”仅集中在数组内存大小对于将来的引用来说太大;还将数组存储为 bool 而不是 uint64。

最佳答案

您正在尝试分配长度为 600851475143uint64 数组。对于 8 字节的 uint64,这意味着该数组将占用 600851475143*8byte,大约是 4.5TB 的内存。即使您的系统可以分配那么多内存(不太可能),您也在尝试将其放在堆栈上,而堆栈的大小通常只有几 MB。此外,您正在尝试写入索引 number_in_question,而数组中的最后一个索引是 number_in_question-1

关于c++ - 运行时错误,使我的 .exe 崩溃,我不确定为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8838063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com