在编写一个埃氏筛的C语言程序的时候,
编译并运行后得到的结果是 return 一个 巨大数(eg.3221225725),
打开调试,在 调用 埃氏筛函数 的时候 报错
Program received signal SIGSEGV, Segmentation fault.
百度/CSDN原因,没有找到可能相同的点,
因而,求助orz
代码如下:
#include<cstdio>
#include<cmath>
#define maxn 10000000
//埃氏筛0号:输入一个数,判断是否为质数
bool Erato_sieve_0(long n)
{
printf("Get in this func\n");
bool ret=true;
bool is_prime[maxn]={true};//判断是否为质数
is_prime[1]=false;
is_prime[2]=true;
if(n>0&&n!=1&&n!=2)//除非特判
{
for(long i=2;i<=n/2+1;i++)//可能乘出n的数
{
if(is_prime[i])//可能乘出n的质数
{
if(n%i==0)//如果乘出,则不是质数
{
ret=false;
break;
}
for(int j=2;j<=n/i+1;j++)//在有限范围内除去非质数(节省计算)
{
is_prime[i*j]=false;
}
}
}
}
return ret;
}
int main()
{
long num;
scanf("%ld",&num);
printf("The number is %ld\n",num);
bool checker=Erato_sieve_0(23);
if(checker==true)
{
printf("%ld True\n",num);
}
else
{
printf("%ld False\n",num);
}
return 0;
}