2017-07-04 28 views
0
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; 
    } 

上述代码对于较小的输入工作正常,但是当我尝试提供数字类似于> 100000000 ,它显示的是分段错误。有人可以帮我吗?谢谢!给定一个偶数(大于2),返回总和等于给定数的两个素数

+0

尝试使用'无符号long'或'无符号长long',而不是'int'在你的程序。 –

+2

使用'std :: vector'而不是数组。 – molbdnilo

+1

这不是标准的C++;它使用了几个编译器支持的VLA扩展。 – Justin

回答

0

最有可能int prime[n+1]导致计算器(100'000'000需要大约400 MB的堆栈)。我建议使用std::vector<int> prime(n+1)

+0

谢谢,但也显示了同样的错误。 –

+0

@NamrataTanwar:在这种情况下无法重现您的问题。你可以用你的新代码打开一个新问题,包括关于你的平台,编译器,标志a.s.o的信息。 – MikeMB

相关问题