简单粗暴直接上代码
public static void main(String[] args) {
Long b1 = System.currentTimeMillis();
System.out.println(primeNumber(1000000).toString());
Long e1 = System.currentTimeMillis();
System.out.println("while耗时:" + (e1 - b1)); // 260ms
Long b2 = System.currentTimeMillis();
System.out.println(primeNumber(1000000).toString());
Long e2 = System.currentTimeMillis();
System.out.println("%耗时:" + (e2 - b2)); // 88296ms
}
高效使用boolean或者Integer数组都可
public static List<Integer> primeNumber(int num) {
List<Integer> list = new ArrayList<>();
boolean[] arr = new boolean[num + 1];// 默认false
int index = 2;// 素数从2开始
while (index <= num) {
if (!arr[index]) {// 如果是素数
int k = 2;
while (index * k <= num) {//将整数倍置为true
arr[index * k] = true;
k++;
}
}
index++;
}
for (int i = 2; i <= num; i++) {
if (!arr[i])
list.add(i);
}
return list;
}
普通的%取余的方式求素数
public static List<Integer> primeNumber2(int num) {
List<Integer> list = new ArrayList<>();
for (int i = 2; i <= num; i++) {
if (isSu(i)) {
list.add(i);
}
}
return list;
}
public static boolean isSu(int n) {
for (int i = 2; i < n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}