我如何解决段错误,同时给出值大于10000000在这个c++程序?



如何解决段错误,同时在此c++程序中给出大于10000000的值?我正在尝试在projecteuler.net实践项目,我得到了这个错误请帮助

这部分代码uint64_t prime[max];

显示错误
#include <iostream>
#include <unordered_set>
#include <vector>
#include <cstdint> 
#include <algorithm>
using namespace std;
vector<uint64_t> factors(uint64_t j)
{
vector<uint64_t> facs;
uint64_t count = 0, i = 2;
for (i = 1; i < j; i++)
{
if (j % i == 0)
{
facs.push_back(i);
count = count + 1;
}
}
return facs;
}
uint64_t prime(uint64_t ml)
{
uint64_t max = ml;
uint64_t prime[max];
vector<uint64_t> a = factors(ml);
vector<uint64_t> max_factors;
unordered_set<uint64_t> p;
uint64_t max_prime_factor;
uint64_t i, j;
prime[1] = 1;
for (i = 2; i < max; i++)
{
prime[i] = i;
}
for (i = 4; i < max; i += 2)
{
prime[i] = 2;
}
for (i = 3; i * i < max; i++)
{
if (prime[i] == i)
{
for (j = i * i; j < max; j += i)
{
if (prime[j] == j)
{
prime[j] = i;
}
}
}
}
for (int i : prime)
{
if (i == 1)
{
continue;
}
else
{
p.insert(i);
}
}
for (auto i = a.begin(); i != a.end(); ++i)
{
for (uint64_t k : p)
{
if (*i == k)
{
max_factors.push_back(*i);
}
}
}
max_prime_factor = *max_element(max_factors.begin(), max_factors.end());
return max_prime_factor;
}
int main()
{
uint64_t j;
cout << "Enter the number to find the largest prime factor : ";
cin >> j;
cout << prime(j);
return 0;
}

可变长度数组

uint64_t prime[max];

在c++中是不支持的,当尝试分配一个大的大小时,它有导致堆栈溢出的风险。

你应该用std::vector代替。

std::vector<uint64_t> prime(max);

最新更新