我们经常会使用到素数打表这个工具,判断方法是多种多样的,下面我列举一种好理解的判断方法
思路:
1、初始化visit数组,初始化为true,用visit[i]=true表示这是一个素数。
2、排除非素数,素数的倍数一定不是素数,我们从第一个素数2开始暴利搜索,所以我们可以利用递增的方法来排除。并将标记取消。
3、将0、1重新标记为非素数。
//素数打表
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
bool visit[10000];//用来判断素数
int prime[10000];//存储素数
void is_prime(){
int cnt=0;
memset(visit,true,10000);//全部初始化为素数
for(int i=2;i<10000;i++)//从0开始去除掉所有的素数的倍数
if(visit[i]){//如果是素数,那么这个素数的倍数也是素数。
prime[cnt++]=i;//是素数就送入prime数组中。
for(int j=2*i;j<10000;j=j+i)
visit[j]=false;
}
visit[0]=false;visit[1]=false;//0和1都不是素数。
}
int main(){
int n;
scanf("%d",&n);
is_prime();
for(int i=0;i<n;i++)
if(visit[i])
printf("%d ",i);
return 0;
}