gpt4 book ai didi

c - m 和 n 之间的素数

转载 作者:行者123 更新时间:2023-11-30 20:26:48 25 4
gpt4 key购买 nike

我在 SPOJ 中尝试了一个素数不生成问题(链接:http://www.spoj.com/problems/PRIME1/)。我正在使用 seive 算法。当我使用 spoj gcc 时,出现 SIGSEGV 错误。但是当我使用 ubuntu gcc 进行编译时,它适用于所有测试用例。

这是我的源代码。请帮助

float sqroot( float x)
{
float a , b;
a = x; // copy given value to 'a'
do
{
b = a; // copy value of 'a' to 'b' before 'a' is modify
a = (a + x/a) / 2; // modify 'a' value until we reach sqroot result
}
while( a!= b); // execute loop until a == b
return( a); // 'a ' or 'b' is sqroot of 'x'
}
int main()
{
int prime[4000];
int prime_index=0;
bool find_prime[100001];
int i,j;
int m,n;
int iremainder;
int T,t_index;
int PRIME_FLAG=1;
float square;
int limit;
prime_index++;
prime[prime_index]=2;
for(i=3;i<=32000;i=i+2)
{
PRIME_FLAG=1;
square = sqroot((float)i);
limit = ((int)(square))+1;
for(j=1;j<=prime_index,prime[j]<=limit;j++)
{
if(prime[j]!=0)
{
if((i%prime[j]) == 0)
{
PRIME_FLAG = 0;
break;
}
}
}
if(PRIME_FLAG)
{
prime_index++;
prime[prime_index]=i;
printf("%d\n",i);
}
}
printf("Enter the no of test cases:");
scanf("%d",&T);
if(T<=10)
{
for(t_index=1;t_index<=T;t_index++)
{
printf("Enter the values of m and n :");
scanf("%d%d",&m,&n);
if((m>=1) && (n<=1000000000) && ((n-m)<=100000))
{
if(m == 1)
m=2;

//Set all numbers from m to n as prime
for(i=m;i<=n;i++)
find_prime[i]=true;
//Find the prime numbers between m to n
square = sqroot((float)n);
limit = ((int)(square))+1;
for(i=1;i<=prime_index,prime[i]<=limit;i++)
{
if(m>=prime[i])
{
if(prime[i]!=0)
iremainder=m%prime[i];
j=prime[i]*iremainder;
}
else
{
iremainder=prime[i]-m;
if(m+iremainder == prime[i])
j=2*(m+iremainder);
else
j=m+iremainder;
}
for(;j<=n;j=j+prime[i])
find_prime[j]=false;
}
//Print all prime no's
for(i=m;i<=n;i++)
{
if(find_prime[i])
printf("%d\n",i);
}
}
}
}
return 0;
}

最佳答案

你的for循环是错误的。

for(j=1;j<=prime_index,prime[j]<=limit;j++)

应该是

for(j=1;(j<=prime_index)&&(prime[j]<=limit);j++)

第一个条件将被执行,但结果将被忽略。

所以幸运的是,在超出数组范围之前,您在未初始化的数组中发现了一个大于限制的数字,这将导致 SIGSEGV。

for(i=1;i<=prime_index,prime[i]<=limit;i++)

有同样的问题。

Click here for more details

关于c - m 和 n 之间的素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24036036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com