筛选法求素数(1)

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

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

代码:

#include<stdio.h>
#include<math.h>
#define N 10001
int main()
{
    bool prime[N];
    long long  i,j;
    for(i=2; i<N; i++)
    {
        if(i%2==0)
            prime[i]=false;
        else
            prime[i]=true;
    }
    for(i=3;i<sqrt(N);i+=2)
        if(prime[i])
    {
        for(j=i+i;j<N;j+=i)
            prime[j]=false;
    }
    for(i=2;i<N;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)后面找到与之对应的数,这样可以避免多找一些数;

猜你喜欢

转载自blog.csdn.net/Lee_W0329/article/details/81110409
今日推荐