思想:
筛法求素数:把2到n中所有的数都列出来,然后从2开始,先划掉n内所有2的倍数,然后再从下一个素数开始,划掉相应的倍数,最后剩下的数,都是素数,即用空间换时间。
步骤:
1、设置一个标记数组,isPrime,当isPrime[i]的值为1时,就是素数
2、划掉i的的倍数,比如i*2啥的
3、输出素数
代码:
#include <iostream>
using namespace std;
#define MAX_NUM 10000000
char isPrime[MAX_NUM+10];//isPrime[i]的结果为1表示为素数 定义char比Int更加节省空间
int main(){
for(int i=2;i<=MAX_NUM;i++){//假设所有的都是素数
isPrime[i]=1;
}
for(int i=2;i<=MAX_NUM;i++){//每次将衣蛾素数的所有倍数标记为非素数
if(isPrime[i]){
for(int j=2*i;j<=MAX_NUM;j+=i){
isPrime[j]=0;//将素数i的倍数标记为非素数
}
}
}
for(int i=2;i<=MAX_NUM;i++){
if(isPrime[i])
cout<<i<<endl;
}
return 0;
}