判斷素數的2種方式

第一種,遍歷判斷

static boolean isPrime(int m) {
		if (m == 1)
			return false;
		// 2 、 3 單獨處理
		if (m == 2 || m == 3)
			return true;
		// 不在6的倍數兩邊的一定不是素數
		if (m % 6 != 1 && m % 6 != 5)
			return false;
		int sqrt_m = (int) Math.sqrt(m);
		// 在6的倍數兩側的也可能不是質數
		for (int i = 5; i <= sqrt_m; i += 6)
			if (m % i == 0 || m % (i + 2) == 0)
				return false;
		return true;
	}

第二種,篩選法(生成法)判斷

	static boolean[] Prime = null;

	// 數據範圍 1 ~ len
	// 這裏用false表示質數
	static void init(int len) {
		Prime = new boolean[len + 1];
		// 0和1 不是質數
		Prime[1] = Prime[0] = true;
		int index = 0;
		for (int i = 2; i <= len; i++)
			if (!Prime[i])
				// 當前素數的所有倍數都不是素數
				for (int j = i * 2; j <= len; j += i)
					Prime[j] = true;
		// 剩下的數字都是素數
	}
	// 判斷給的數字是否是質數
	static boolean check(int num) {
		return !Prime[num];
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章