Java函数——如何判断数字是否是质数?
发布时间:2023-06-23 07:28:31
在Java中判断一个数字是否是质数可以使用一些小技巧和算法。下面将介绍几种判断质数的方法。
方法一:暴力枚举
暴力枚举是最原始的方法,即从2开始到该数的开方,依次判断是否能整除该数,如果能整除,则不是质数,如果所有的都不能整除,则是质数。具体实现如下:
public static boolean isPrime(int n) {
if (n <= 1) return false;
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
方法二:优化暴力枚举
如果该数字是偶数,那么不可能是质数,所以可以先判断数字是否为偶数,如果是偶数,则直接返回false。然后再进行类似暴力枚举的判断,具体实现如下:
public static boolean isPrime(int n) {
if (n <= 1 || (n > 2 && n % 2 == 0)) return false;
for (int i = 3; i <= Math.sqrt(n); i += 2) {
if (n % i == 0) {
return false;
}
}
return true;
}
方法三:厄拉多塞筛法
厄拉多塞筛法是一种很高效的算法,它的基本思路是从2开始,将每个素数的倍数都标记成合数,然后再找到下一个素数,重复以上操作。具体实现如下:
public static boolean isPrime(int n) {
if (n <= 1) return false;
boolean[] isPrime = new boolean[n + 1];
Arrays.fill(isPrime, true);
isPrime[0] = false;
isPrime[1] = false;
for (int i = 2; i <= Math.sqrt(n); i++) {
if (isPrime[i]) {
for (int j = i * i; j <= n; j += i) {
isPrime[j] = false;
}
}
}
return isPrime[n];
}
方法四:米勒-拉宾质数检验
米勒-拉宾质数检验是一种很高效的随机算法,它的基本思路是通过随机生成一个数x,然后判断n是否是x的幂次,如果不是,则可以认为n是合数,如果是则可能是质数。具体实现如下:
public static boolean isPrime(int n) {
if (n <= 1) return false;
if (n <= 3) return true;
int k = 5;
while (k-- > 0) {
int a = (int) (Math.random() * (n - 3) + 2);
int x = a % n;
for (int i = 0; i < n - 1; i++) {
x = (x * x) % n;
if (x == 1) {
break;
}
if (x == n - 1) {
return true;
}
}
if (x != n - 1) {
return false;
}
}
return true;
}
以上就是几种在Java中判断一个数字是否是质数的方法,可以根据实际情况选择最适合的方法。
