运行时错误SIGTSTP

时间:2017-08-24 16:53:55

标签: c algorithm

我正在尝试执行代码,其中我必须找到素数不高达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;
}

1 个答案:

答案 0 :(得分:0)

当程序尝试访问不允许访问的内存位置时发生分段错误(例如:读取超出其限制的数组元素) 查看输入上的约束,然后根据约束对变量进行类型转换。 (例如,例如,将MAX的值最多降低10 ^ 6)

https://discuss.codechef.com/t/how-to-remove-runtime-sigtstp-error/21657