判断一个数字是否为质数,需要检查该数字是否能被除了1和它本身之外的其他整数整除。如果能被整除,那么它不是质数。否则,它是质数。
从2开始遍历到该数字的平方根,检查是否能整除该数字。
public class PrimeNumberChecker {
public static boolean isPrimeSimple(int num) {
if (num < 2)
return false;
int sqrtNum = (int) Math.sqrt(num);
for (int i = 2; i <= sqrtNum; i++) {
if (num % i == 0)
return false;
}
return true;
}
public static void main(String[] args) {
int num = 23; // Example number to check for primality
System.out.println("Is " + num + " a prime number? " + isPrimeSimple(num));
}
}
在简单遍历法的基础上,可以进行一些优化。只需要遍历到该数字的平方根,同时每次遍历加2(因为偶数除了2都不是质数)。
public class PrimeNumberChecker {
public static boolean isPrimeOptimized(int num) {
if (num < 2)
return false;
if (num == 2)
return true;
if (num % 2 == 0)
return false;
int sqrtNum = (int) Math.sqrt(num);
for (int i = 3; i <= sqrtNum; i += 2) {
if (num % i == 0)
return false;
}
return true;
}
public static void main(String[] args) {
int num = 23; // Example number to check for primality
System.out.println("Is " + num + " a prime number? " + isPrimeOptimized(num));
}
}
该方法利用了质数的特性:所有的非质数都可以分解为质数的乘积。从小到大逐步筛选掉非质数,直到剩下的数字即为质数。
public class PrimeNumberChecker {
public static boolean isPrimeEratosthenes(int num) {
if (num < 2)
return false;
// Create a boolean array to mark if a number is prime
boolean[] primeFlags = new boolean[num + 1];
Arrays.fill(primeFlags, true); // Assume all numbers are prime initially
primeFlags[0] = primeFlags[1] = false; // 0 and 1 are not prime
// Apply Sieve of Eratosthenes algorithm
for (int i = 2; i * i <= num; i++) {
if (primeFlags[i]) {
for (int j = i * i; j <= num; j += i) {
primeFlags[j] = false; // Mark multiples of prime numbers as non-prime
}
}
}
return primeFlags[num];
}
public static void main(String[] args) {
int num = 23; // Example number to check for primality
System.out.println("Is " + num + " a prime number? " + isPrimeEratosthenes(num));
}
}
推荐使用方法3(埃拉托斯特尼筛法)作为最优方法,尤其对于大数判断,它能提供较高的效率。如果对空间复杂度有较高要求,可以根据具体情况选择方法2(优化遍历法)。方法1(简单遍历法)在效率上不如方法2和方法3,不推荐在实际应用中使用。