筛选法求素数(1)

题目:求10000以内的所有素数(筛选法)

在C++里面开一个bool型的数组,bool型(true=1,false=0);

代码:

#include
#include
#define N 10001
int main()
{
    bool prime[N];
    long long  i,j;
    for(i=2; i     {
        if(i%2==0)
            prime[i]=false;
        else
            prime[i]=true;
    }
    for(i=3;i         if(prime[i])
    {
        for(j=i+i;j             prime[j]=false;
    }

    prime[2]=1;

    for(i=2;i         if(prime[i])
        printf("%lld\n",i);
    return 0;

}

1.从N个数中找出偶数和奇数,找到偶数用false标记,找到奇数用ture标记(因为下面还要继续找它的倍数进行排除)
2.从奇数中开始派出是能够整出的数,从i=3开始,不能从1开始,如果从1开始,第二层的for循环里面每次都会加1,会将1到N全部用false标记,此时结果是完全错误的,此时每次都加上i,标记的是奇数整数倍而且不包括它的本身,但是会重复标记;

3.输出下标即可;

注:此时至于为什么写到sqrt(N)呢,我认为在不是在小于sqrt(N)之前的数,只要它正好整除,便能在sqrt(N)后面找到与之对应的数,这样可以避免多找一些数;

 

你可能感兴趣的:(筛选法求素数(1))