快速获取素数笔记

参考于

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);
	}
}




猜你喜欢

转载自blog.csdn.net/hexiaodiao/article/details/79151849