我正在尝试执行代码,其中我必须找到素数不高达10 ^ 18并且在此范围内给出否,我必须计算具有恰好两个因素的否。这是代码。输入可以在范围(5,10 ^ 8)内变化,并且在场景中可以传递多个否。但是当我输入高达100000时,它会运行,当输入高于它时,它会给出SIGTSTP运行时错误。
#include <stdio.h>
#include<stdlib.h>
#define MAX 100000000
#include<math.h>
int main() {
int t;
long int n;
long int i;
long int p=2;
long int j,no;
long int k;
int* arr;
int count=0;
arr=(int*)malloc(sizeof(int)*MAX);
for(i=0;i<=MAX;i++)
arr[i]=1;
for(i=2;i*i<=MAX;i++){
if(arr[i]==1){
for(p=i*2;p<=MAX;p+=i)
arr[p]=0;
}
}
scanf("%d",&t);
while(t--){
scanf("%ld",&n);
k=0;
if(n<0)
continue;
for(i=4;i<n;i++){
if(arr[i]!=1){
count=0;
no=i;
if(no%2==0&&arr[no/2]==1){
k++;
continue;
}
for(j=3;j<=sqrt(no);j+=2){
if(no%j==0&&arr[no/j]==1&&arr[j]==1){
k++;
break;
}
}
}
}
printf("%ld\n",k);
}
free(arr);
return 0;
}
答案 0 :(得分:0)
当程序尝试访问不允许访问的内存位置时发生分段错误(例如:读取超出其限制的数组元素) 查看输入上的约束,然后根据约束对变量进行类型转换。 (例如,例如,将MAX的值最多降低10 ^ 6)
https://discuss.codechef.com/t/how-to-remove-runtime-sigtstp-error/21657