给定一个偶数(大于2),返回两个素数,其总和等于给定数

Given an even number ( greater than 2 ), return two prime numbers whose sum will be equal to given number

本文关键字:两个 一个 大于 返回      更新时间:2023-10-16
vector<int> Solution::primesum(int n) {
int prime[n+1];
for(int i=0;i<n+1;i++){
prime[i]=1;
}
prime[0]=0;
prime[1]=0;
for(int i=2;i<=sqrt(n);i++){
if(prime[i]==1){
for(int j=2;i*j<=n;j++)
prime[i*j]=0;
}
}
vector <int> sum;
for(int i=2;i<=(n)/2;i++){
if(prime[i]==1&&prime[n-i]==1){
sum.push_back(i);
sum.push_back(n-i);
return sum;
}
}
return sum;
} 

上面的代码适用于较小的输入,但是当我尝试为其提供诸如>1000000000 之类的数字时,它显示了分段错误。有人可以帮我吗?谢谢!

int prime[n+1]最有可能导致堆栈溢出(100'000'000 需要堆栈上的 ~400 MB(。我建议改用std::vector<int> prime(n+1)

相关文章: