您的位置:首页 > 其它

素数筛选

2016-03-22 20:46 183 查看
对于大量数据中查找素数的问题,由于数据量特别大时间定特别长,此时就能体现算法的作用,下面总结一下素数筛选的基本方法

具体筛法是:先把n个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。

原始代码(原理)

#indfine maxn 10000000

bool pri[maxn]

void pring()

{

  memset(pri,true,sizeof());

pri[0]=pri[1]=0;

t=(int)sqrt(max);

  for(int i=2;i<t;i++)

{

if(pri[i])

for(int j=i;j<maxn;j+=i)//聪明的你一定能理解的

pri[j]=0;

}

}

优化代码

#indfine maxn 10000000

bool pri[maxn]

void pring()

{

  memset(pri,true,sizeof());

t=(int)sqrt(max);

  for(int i=2;i<t;i++)

{

if(pri[i])

for(int j=i*i;j<maxn;j+=i)

pri[j]=0;

}

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: