您的位置:首页 > 其它

筛法求小于等于整数n的所有质数

2009-02-13 22:03 218 查看
筛法求n以下的质数最核心的是确定其倍数未消去的最大数p应该满足的条件。要消去q的倍数,最小应该从q*q考察起(因为其他跟小的倍数已经由2p,3p。。。(p-1)*p消去了) 那么消去q的倍数只需从q*q开始 到n结束(满足不等式q*q <=n).

以下是测试代码:

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#define Maxsize 25

// 筛法求n以内的素数

void sieve(int a[],int n)

{

int i,j,m,s=0;

int k = (int)sqrt(n);

for(i = 1; i <= k ; i++)

{

if(a[i] != 0)

{

j=a[i]*a[i];

while(j <= n)

{

a[j-1] = 0; //将该元素的标记标为零

j = j + a[i];

}

}

}

for(m = 0 ; m < n ; m++) //打印筛选出来的质数

{

if(a[m] >= 2)

{

printf("%d ",a[m]);

s++;

}

}

printf("/n");

printf("%d/n" , s); //输出筛选质数个数

}

void main()

{

int i;

int array[Maxsize];

for(i = 0 ; i < Maxsize; i++)

array[i] = i+1; //将数组赋值为1...n

sieve(array,Maxsize);

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