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写道“…您的数组只有…您应该索引它…”代词“它”指代“您的数组”。