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

时间:2017-07-04 06:56:00

标签: c++

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;
     } 

上面的代码适用于较小的输入但是当我尝试为它提供类似&gt; 100000000的数字时,它显示出分段错误。有人可以帮帮我吗?谢谢!

1 个答案:

答案 0 :(得分:0)

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