第一種,遍歷判斷
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];
}