求素数有两种方法两种
一种是暴力枚举法
另外一种是埃氏筛法
方法一:暴力枚举法
该方法是最简单的方法,遍历每个数,判断是否为素数。但是,该方法的时间复杂度较高,不适用于大规模的素数判断。
public static boolean isPrime(int num) {
if (num <= 1) {
return false;
}
for (int i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
public static void main(String[] args) {
for (int i = 1; i <= 100; i++) {
if (isPrime(i)) {
System.out.print(i + " ");
}
}
}
方法二:埃氏筛法
该方法是一种筛选法,从2开始,将每个素数的倍数都标记为合数,直到筛子的最大值。
import java.util.ArrayList;
import java.util.List;
public class PrimeNumber {
public static List<Integer> getPrimes(int max) {
// 创建一个布尔数组,用来表示每个数是否是合数
boolean[] isComposite = new boolean[max + 1];
// 创建一个整数列表,用来存储素数
List<Integer> primes = new ArrayList<>();
// 从2开始遍历每个数
for (int i = 2; i <= max; i++) {
// 如果当前数不是合数,说明它是素数
if (!isComposite[i]) {
primes.add(i); // 将素数添加到列表中
// 将当前素数的倍数都标记为合数
for (int j = i * i; j <= max; j += i) {
isComposite[j] = true;
}
}
}
return primes; // 返回素数列表
}
public static void main(String[] args) {
List<Integer> primes = getPrimes(100); // 获取100以内的素数
for (int prime : primes) {
System.out.print(prime + " "); // 输出素数列表
}
}
}
以上两种方法都可以求素数,但是在实际应用中,建议使用第二种方法,因为它的时间复杂度较低。