输入:
The input begins with the number t of test cases in a single line (t<=10). In each of the next t lines there are two numbers m and n (1 <= m <= n <= 1000000000, n-m<=100000) separated by a space.
这是问题的链接:http://www.spoj.com/problems/PRIME1/
这是我的程序:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int n,m,t,i=0,j,k=0;
int tm[10],tn[10];
scanf("%d",&t); //test cases
while(i<t)
{
scanf("%d %d", &tm[i],&tn[i]);
i++;
}
int * a = malloc((n+1)*sizeof(int));
while(k<t)
{
n=tn[k];
m=tm[k];
a[0]=a[1]=0;
for(i=2;i<=n;i++)
a[i]=i;
for(i=2;i<=sqrt(n);i++)
{
if(a[i])
{
for(j=(i*i);j<=n;j+=i)
{
a[j]=0;
}
}
}
for(i=m;i<=n;i++)
{
if(a[i])
printf("%d \n", a[i]);
}
k++;
printf("\n");
}
return 0;
}
最佳答案
许多编码站点不允许声明大小为 10^9 的数组。这可能会导致 SIGSEGV。
您需要以任何方式更改代码逻辑,因为即使您解决了此错误,您的逻辑也可能会给您带来 TLE
关于c - 为什么我的 PRIME1 - SPOJ 实现会收到 SIGSEGV,即使它在我的电脑中的所有测试用例中运行良好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23161100/