如何在此C++程序中给出大于10000000的值时解决段错误?

如何在此 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);


以上是如何在此C++程序中给出大于10000000的值时解决段错误?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>