- 通过寻找公约数来判断,最经典的算法
boolean flag = true;
for (int i = 2; i <= n; i++) {
for (int j = 2; j <= Math.sqrt(i); j++) {
if (i % j == 0) {
flag = false; //如果i%j==0说明这个数是合数,则让bool=false
}
}
if (flag) {
System.out.println(i);//这里是素数
}
flag = true;
}
- 通过Boolean分类拆分奇偶,并通过奇数倍数自增剔除奇数中的合数
boolean[] bool1 = new boolean[n+1];
for (int i = 3; i <= n; i +=2) { //基数相加,这个会丢失2
if (!bool1[i]) {
for (int j = i + i; j <= n; j += i) { bool1[j] = true; }
}
if (!bool1[i]) {
System.out.println(i);//这里是素数
}
}
二者速度差别
n=10000
time1=14
time2=1