埃式筛
通过打表的方式来统计素数,打好表后O(1)的复杂度就可以判断一个数,是否是一个素数!
package 素数;
import java.util.ArrayList;
import java.util.Scanner;
public class 埃式筛 {
static int n;
static int N=10000010;//空间为10M只能处理10^7的数据
static int st[]=new int[N];
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
ArrayList<Integer> num=new ArrayList<>();
n=sc.nextInt();
for(int i=2;i*i<=n;i++) {//此处与试除法原理类似,做了i<=sqrt(n)的优化
if(st[i]==0) {
num.add(i);
for(int j=i*i;j<=n;j+=i) {//此处j=i*i做了简单优化,例如 i = 5 时,25、、35、、45已经在前面已经在前面i = 2, 3, 4 的时候筛过了
st[j]=1;
}
}else continue;
}
for(int i=0;i<num.size();i++) {
System.out.print(num.get(i)+" ");
}
}
}