首页 > 其他 > 详细

筛法求素数

时间:2015-03-24 21:09:47      阅读:295      评论:0      收藏:0      [点我收藏+]

  筛法求素数的原理是这样的,先找到第一个素数,然后将第一个素数的倍数都去掉,然后找到第二个素数,然后将第二个素数的倍数都去掉。

筛法求素数可以很容易求得小于n的所有素数。

如果要求第n个素数,那么就要用素数定理,求得第n个素数所在的范围,然后再用筛法。

 

#include <stdio.h>
#include <string.h>
#include <math.h>
const int N = 10000;
bool vis[N];
/*
偶数都不是素数,所以偶数的倍数没必要去掉
*/
void getPrimeTable(int n)
{
    int i,j;
    int t = sqrt(n);
    for(i=3; i<=t; i+=2)//从3开始,将素数的倍数去掉
    {
        if(!vis[i])//!vis表示为素数
        for(j=i*i;j<=n; j+=2*i)//将i的i倍开始标记为非素数,因为偶数不用标记,所以j+=2*i,即让j为奇数
            vis[j] = true;
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    getPrimeTable(n);
    printf("%d",2);
    for(int i=3; i<=n; i+=2)
        if(!vis[i])
            printf(" %d",i);
}

 

筛法求素数

原文:http://www.cnblogs.com/justPassBy/p/4363795.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!