码迷,mamicode.com
首页 > 其他好文 > 详细

素数筛选法

时间:2016-03-28 23:26:56      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

筛选法(埃拉托色尼(Eratosthenes)筛法)求素数,例如1~100

思想:逐个筛选,直到int(sqrt(100))个

1)因为1不是质数,将1筛去

2)2是质数,将2的倍数全都挖掉

3)3是质数,将3的倍数全都挖掉

4)4已经被挖去,不进行与4相关的操作

5)5是质数,将5的倍数全都挖掉

6)这个过程一直进行到后面的数全都挖掉为止

不是从1开始:如10~18----一个一个筛--->18

#include <stdio.h> 
#include <math.h>
#include <stdlib.h>
//#include <string.h>
int isprime(int n)
{
    int i;
    if(n == 1)
        return 0;
    for(i=2;i<(int)sqrt(n);i++)
        if(n%i == 0)
            return 0;
    return 1;
}
int main()
{
    int n,i,j;
    scanf("%d",&n);
    int *num = (int*)malloc(sizeof(int)*(n+1));
    //memset(num,0,n+1);//不能将动态开辟的数组数都初始化为0
    for(i=1;i<=n;i++)
        num[i] = 0;
    //挖数
    num[1] = 1;
    for(i=2;i<=(int)sqrt(n);i++) 
    {
        if(!num[i])
        {
            if(isprime(i))
            {
                for(j=2*i;j<=n;j++)    //挖掉质数的倍数的数 
                    if(j%i == 0)
                        num[j] = 1;
            }
        }
    }
    for(i=1;i<=n;i++)
        if(!num[i])
            printf("%d ",i);
    printf("\n");
    return 0;
}

 

素数筛选法

标签:

原文地址:http://www.cnblogs.com/520xiuge/p/5331123.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!