参考于
http://blog.csdn.net/huang_miao_xin/article/details/51331710
import java.util.Arrays;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
// 打印2-num之间的所有素数的数组
System.out.println(Arrays.toString(newPrime_2(num)));
sc.close();
}
public static int[] newPrime_2(int num) {
int[] arr = new int[10000];
// 处理2和3
arr[0] = 2;
arr[1] = 3;
int cnt = 2;
// 设置外循环的名称
MAIN_LOOP: for (int i = 5; i < num; i++) {
// 如果数字不在6的两侧,则继续外循环
if (i % 6 != 1 && i % 6 != 5)
continue MAIN_LOOP;
// 取i的平方根
int temp = (int) Math.sqrt(i);
for (int j = 5; j <= temp; j += 6) {
// 当6的倍数两侧如果能被整除,则继续外循环
if (i % j == 0 || i % (j + 2) == 0)
continue MAIN_LOOP;
}
// 将素数值记录进数组
arr[cnt++] = i;
}
// 返回长度为cnt的新的素数数组
return Arrays.copyOf(arr, cnt);
}
}