素数的判断其实谁都会,所以这篇跳过简单的素数判断,直接学习如何快速判断1到N的素数,以及判断大数据是否为素数。

 (1)埃氏筛法

现在我们先学习埃氏筛选法,此法实用与大规模判断素数,比如1到N的素数有那些啊,等等等等。

这个算法流弊哦,与辗转相除法一样古老哇。

首先,将2到n范围内的所有整数写下来。其中最小的数字2是素数,将表中2的倍数都划去。表中剩余的最小数字是3,不能被更小的数整除,是素数。如果表中最小的是m,m为素数,将m的倍数划去。

 附上表格学习:

2 3 4 5 6 7 8 9 10 11 12
2 3 - 5 - 7 - 9 - 11 -
2 3 - 5 - 7 - - - 11 -

 

#include<stdio.h>
#define MAX 1000000
bool is[MAX];///判断
int pr[MAX];///储存素数
///返回1到n有多少个素数,以及储存
int sieve(int n)
{
    int p=0;
    ///初始化让他们高兴一下先
    for(int i=0 ; i<=n ;i++)
        is[i]=true;
        is[0]=is[1]=false;///根本都不是自己人
        for(int i=2 ; i<=n ; i++)
        {
            ///如果是自己人
            if(is[i])
            {
                ///我就记录咯
                pr[++p]=i;
                ///那现在就很明显了,关于自己人I的倍数都不是自己人了
                for(int j=i*2 ; j<=n ; j+=i)
                    is[j]=false;
            }
        }
        return p;
}
int main()
{
    int n;
    scanf("%d",&n);
    printf("%d\n",sieve(n));
    return 0;
}
View Code

相关文章: