求助!埃氏筛/调试/gdb/未知问题
  • 板块灌水区
  • 楼主干烧通电
  • 当前回复5
  • 已保存回复5
  • 发布时间2021/10/4 11:50
  • 上次更新2023/11/4 04:56:06
查看原帖
求助!埃氏筛/调试/gdb/未知问题
123093
干烧通电楼主2021/10/4 11:50

21/10/4 未知问题

在编写一个埃氏筛的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;
}
2021/10/4 11:50
加载中...