import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner x=new Scanner(System.in);
int size=x.nextInt();
boolean[] all=new boolean[size];
int number=1;
for(int i=1;i<size;i++){
if(!all[i]){
System.out.println(i+1);
for(int j=2;j<=(size/(i+1));j++){
number=j*(i+1)-1;
all[number]=true;
}
}
}
}
}
第一步创建一个boolean型的数组,长度为n,boolean值数组内容默认为false。
第二步从下标为1处开始遍历数组,对应的自然数为2(通过下标加1的方式表达)
第三步判断数组值是否为false,如果为false则说明这是一个素数,之后将范围内所有的该数的倍数全部记为非素数,并将对应的数组值改成true,循环直到结束
筛选法的一个核心点在于,从最小的素数开始按照倍数筛选掉非素数,因为是从2开始的,之后遇到的下一个素数是3之后使5,这种方式可以保证遇到的下一个数组为false的对应数字是素数,原因很简单,因为比这个数字无法整除除了1以为所有比他小的数。