埃拉托斯特尼 之 超出范围100000000



            埃拉托斯特尼筛法,简称埃氏筛或爱氏筛,是一种由埃及数学家埃拉托斯特尼所提出的一种简单检定素数的算法。要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。

        算法思想: 用一个数组sieve[i],下标i对应自然数i,对于数组sieve[i]的值只存0或者1,也就是i划去的时候,就将该数组设为0;for(;k<N+1&&sieve[k]==0;k++); 用K值表示剩下数中的最小数,注意;不可以省略,里面就是不执行任何语句。最外面的for循环,结束条件在里面呢 if(k==N+1)break;最后一个for循环就是从sieve中去掉k及其倍数 sieve[i]=0;

#include <iostream>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
#define N 1000 
int main(int argc, char** argv) {
	char sieve[N+1]={0};
	int i=0,k;
	/*初始时2~N都放在sieve数组中*/ 
	for(i=2;i<N+1;i++)
	sieve[i]=1;  // 初始化1 
	for(k=2;;){
		//找出剩下数中最小者用K表示 
		for(;k<N+1&&sieve[k]==0;k++);
		
		if(k==N+1)break; //退出条件 
		printf("%d\t",k);//输出素数 
		//从sieve中去掉k及其倍数 
		for(i=k;i<N+1;i=i+k)
		sieve[i]=0;
		
	}
	
	return 0;
}

输出的结果

 


对于上面的程序,有个很严重的问题的,如果我给#define N 100000000那么如果在linux下一定会出现段错误,为什么会出现段错误,就是因为这个超出了栈的大小,如果要解决这个问题,可以用malloc了,动态开辟么,如果想在linux下查看的话就就用ulimit -a

ulimit  -a 进行查询 

 

core file size          (blocks, -c) 0

data seg size           (kbytes, -d) unlimited

scheduling priority             (-e) 0

file size               (blocks, -f) unlimited

pending signals                 (-i) 71680

max locked memory       (kbytes, -l) 32

max memory size         (kbytes, -m) unlimited

open files                      (-n) 1024

pipe size            (512 bytes, -p) 8

POSIX message queues     (bytes, -q) 819200

real-time priority              (-r) 0

stack size              (kbytes, -s) 10240

cpu time               (seconds, -t) unlimited

max user processes              (-u) 71680

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值