-1

我正在尝试解决这个问题,我想出了这个

#include <stdio.h>
#define primeLimit 100000

int prime (long int Start2,  long int Stop2 )
{
    long int a[primeLimit];
    long int i,j,k,l;
    for (i=Start2;i<=Stop2;i++) {
        a[i] = 1;
    }
    for (i=Start2;i<=Stop2;i++) {
    if (a[i]!= 0 && i!=1) {
        for (j=2; j*j< i;j++) {
            if(i%j==0)
                break;
        }
        if(j*j > i) {
            printf(" \n %d",i);
            l = i;
            for (k = i*i; k< Stop2;) {
                a[k] = 0;
                k = k+l;
            }
        }
        else {
            a[i] = 0;
        }
    }
}

return 0;
}

int main(void)
{
    long int start,stop,a,look;
    scanf("%ld", &look);
    for (a=1;a<=look;a++) {
        scanf("%ld %ld", &start,&stop);
        prime (start,stop);
    }
    return 0;
}

我在 32 位 windows 7 PC 上使用 GNU GCC 编译器、CodeBlocks IDE。当我在我的编译器上运行它时,代码很好。但是当提交它显示运行时错误(SIGSEGV)。谁能指出我哪里出错了/如何做得更好?

谢谢

4

1 回答 1

1

允许的输入范围从 1 到 1000000000,但您的数组只有 100000 个元素 .. 两个输入之间的差异。您应该使用i-Start2or k-Start2、 not ior对其进行索引k。你需要a[primeLimit+1],因为你需要访问 a[Stop2-Start2],即a[100000]

于 2012-10-05T16:18:44.370 回答