gpt4 book ai didi

C++ 类 : calling private function in for-loop from public function

转载 作者:行者123 更新时间:2023-11-30 04:49:18 25 4
gpt4 key购买 nike

给定一系列大数

candidates=[6541367000, 6541368000)

找出那些只能被 2 个质数分解的。

我写了一个 C++ 类:

vector<long long>& prime_fac(N)

返回 N 个素数的 vector ,并且

void print2PrimeFactoriation(vector<long long>& candidates)

仅返回具有 2 个主要因素的候选人。

#include <cmath>
#include <iostream>
#include <vector>
using namespace std;

class primeFactorization {
private:
//vector<long long> prime_vec;
long long upper_limit;
vector<long long> res;

vector<long long>& prime_fac(long long N) {
vector<long long> prime_vec;
if (N < 2) {
cout << "N=" << N << " cannot be factorized by prime numbers" << endl;
}
else {
upper_limit = (long long)sqrt(N);
while (N%2 == 0) {
prime_vec.emplace_back(2);
N /= 2;
}
for (long long prime=3; prime<=upper_limit; prime+=2) {
while (N%prime == 0) {
prime_vec.emplace_back(prime);
}
}
prime_vec.emplace_back(N);
}
return prime_vec;
}

public:
void print2PrimeFactoriation(vector<long long>& candidates) {
for (long long candidate : candidates) {
res = prime_fac(candidate);
cout << candidate << endl;
if (res.size() == 2) {
cout << candidate << " can be factorized by 2 prime numbers (";
cout << res[0] << ", " << res[1] << ")\n";
}
}
}
};


int main() {
primeFactorization sol;

vector<long long> candidates;
for (long long candidate=6541367001; candidate<6541368000; candidate+=2) {
candidates.emplace_back(candidate);
}

sol.print2PrimeFactoriation(candidates);

return 0;
}

奇怪的是,我收到了错误信息:

terminate called after throwing an instance of 'std::bad_alloc'                                                                                                                      
what(): std::bad_alloc
Aborted

我什至尝试将输入 vector 候选减少为仅包含 1 个元素,但同样的错误仍然存​​在。

错误是什么?我该怎么做才能解决?另外,它是进行质因数分解的最有效方法吗?

最佳答案

您正在返回对局部变量的引用 prime_vec在函数中 vector<long long>& prime_fac(long long N) .

vector<long long>& prime_fac(long long N) {
vector<long long> prime_vec;
...
...
return prime_vec;
}

局部变量的生命周期prime_vec这里仅限于函数的范围。在范围退出后尝试使用它会导致未定义的行为。

GCC and Clang issue a warning 这样的编译器当你这样做时:

warning: reference to stack memory associated with local variable 'prime_vec' returned [-Wreturn-stack-address]
return prime_vec;
^~~~~~~~~

关于C++ 类 : calling private function in for-loop from public function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55466863/

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