题目:求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)后面找到与之对应的数,这样可以避免多找一些数;