C 需要修复此素数生成代码(SPOJ PRIME1)

C 需要修复此素数生成代码(SPOJ PRIME1),c,C,我正试图解决这个问题,我想到了这个 #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&l

我正试图解决这个问题,我想到了这个

#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;
}
#包括
#定义primelimit100000
整数素数(长整数开始2,长整数停止2)
{
长整数a[primeLimit];
长整数i,j,k,l;

对于(i=Start2;i允许的输入范围从1到100000000,但您的数组只有100000个元素。这两个输入之间的差异。您应该使用
i-Start2
k-Start2
对其进行索引,而不是
i
k
。您需要
a[primeLimit+1]/code>,因为您需要访问
a[Stop2-Start2]
,即
a[100000]

如果您在问题中包含运行时错误,则会有所帮助如果Stop2>=primelimit,则在初始化长整型[primelimit]时溢出;
将对堆栈极其残酷,可能会导致程序阻塞。最好动态分配数组,或将其放入数据/bss段(将其置于全局范围或使其
静态长整型为[…];
)。你为什么遗漏了最重要的信息,即输入?请注意道格拉斯的评论。@JanitoVaqueiroFerreiraFilho你在说什么?
i
的范围应该从
Start2
Stop2
。“你应该用i-Start2或k-Start2对其进行索引…”我正在努力将这个概念形象化。请你用一个代码片段解释一下。谢谢你的帮助。如果你不能“形象化”一个相对值,我想我帮不了你。“代码片段”是你自己的代码;使用
i-Start2
,而不是
i
,作为
a
的索引,正如我所说。为什么要花3个多月的时间阅读并回答你问题的答案?如果你当时不打算阅读答案,甚至问你有什么意义?我终于明白了……当你说我在想索引的时候循环不是数组索引本身…非常感谢您的帮助…感谢您…再次为迟来的响应感到抱歉…我没有参与此类在线判断编程,因为monthsI写道“…您的数组只有…您应该索引它…”代词“它”指代“您的数组”。