C SPOJ#2分段故障(SIGSEGV)
我试过了。我就是想不出哪条线路是故障的根源。 试图通过“埃拉托斯坦筛”来解决这个问题C SPOJ#2分段故障(SIGSEGV),c,sieve-of-eratosthenes,C,Sieve Of Eratosthenes,我试过了。我就是想不出哪条线路是故障的根源。 试图通过“埃拉托斯坦筛”来解决这个问题 #include<stdio.h> int main() { unsigned long long int i,j,LIMIT,NUM1; // NUM1 and LIMIT are the starting numbers of the range //like for prime numbers between 31-100 NUM1 = 31 and LIMIT = 100
#include<stdio.h>
int main()
{
unsigned long long int i,j,LIMIT,NUM1;
// NUM1 and LIMIT are the starting numbers of the range
//like for prime numbers between 31-100 NUM1 = 31 and LIMIT = 100
int *primes;
int z = 1,t;
scanf("%d",&t);
while(t--){
scanf("%lld",&NUM1);
if(NUM1==1)
++NUM1;
scanf("%lld",&LIMIT);
primes = malloc(sizeof(int)*(LIMIT));
for(i=2; i<=LIMIT;i++) //initialise every element by 1
primes[i] = 1;
for (i=2;i<LIMIT;i++)
{
if (primes[i])
for(j=i;j*i<=LIMIT;j++)
primes[i*j]=0; // make 0 all elements that are factor of 'j'
}
for (i=NUM1;i<=LIMIT;i++)
{
if(primes[i])
printf("%d\n",i);
// prime[i] will be one for leftover elements which are prime
}
}
return 0;
}
#包括
int main()
{
无符号长整型i,j,极限,NUM1;
//NUM1和LIMIT是范围的起始编号
//与31-100 NUM1=31和LIMIT=100之间的素数类似
int*素数;
intz=1,t;
scanf(“%d”、&t);
而(t--){
scanf(“%lld”&NUM1);
如果(NUM1==1)
++NUM1;
scanf(“%lld”、&LIMIT);
素数=malloc(sizeof(int)*(LIMIT));
对于(i=2;iprimes=malloc(sizeof(int)*(LIMIT));
对于(i=2;imalloc(sizeof(int)*(LIMIT+1)),这是一个正确的选择吗?我尝试了它,但仍然存在运行时错误。是的,但是如果您尝试分配太多内存,malloc将返回NULL。您也应该检查它。请参阅我的编辑以获得答案。
primes = malloc(sizeof(int)*(LIMIT));
for(i=2; i<=LIMIT;i++) //initialise every element by 1
primes[i] = 1;
primes = malloc(sizeof(int)*(LIMIT+1));
if (primes==NULL) {
fprintf(stderr, "Can't allocate that much space\n";
exit(1);
}
for(i=2; i<=LIMIT;i++) //initialise every element by 1
primes[i] = 1;