题目:判断一个数字是否为质数。
程序分析
判断一个数字是否为质数,需要检查该数字是否能被除了1和它本身之外的其他整数整除。如果能被整除,那么它不是质数。否则,它是质数。
方法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));
}
}
优缺点
- 优点:
- 实现简单,容易理解。
- 缺点:
- 效率较低,时间复杂度为O(√n),可能不适用于大数判断。
方法2:优化遍历法
解题思路
在简单遍历法的基础上,可以进行一些优化。只需要遍历到该数字的平方根,同时每次遍历加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));
}
}
优缺点
- 优点:
- 比简单遍历法效率更高,因为避免了偶数的判断。
- 缺点:
- 仍然有一定的时间复杂度,不适用于极大数判断。
方法3:埃拉托斯特尼筛法(Sieve of Eratosthenes)
解题思路
该方法利用了质数的特性:所有的非质数都可以分解为质数的乘积。从小到大逐步筛选掉非质数,直到剩下的数字即为质数。
实现代码
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));
}
}
优缺点
- 优点:
- 效率较高,时间复杂度为O(n log log n)。
- 缺点:
- 需要额外的空间来存储标记,空间复杂度较高。
总结与推荐
- 方法1(简单遍历法)是最简单直接的实现,但效率较低,不适用于大数判断。
- 方法2(优化遍历法)在简单遍历法的基础上进行了优化,效率较高,但仍然有一定的时间复杂度。
- 方法3(埃拉托斯特尼筛法)效率最高,适用于较大数判断,但需要额外的空间。
推荐使用方法3(埃拉托斯特尼筛法)作为最优方法,尤其对于大数判断,它能提供较高的效率。如果对空间复杂度有较高要求,可以根据具体情况选择方法2(优化遍历法)。方法1(简单遍历法)在效率上不如方法2和方法3,不推荐在实际应用中使用。