质数筛——欧拉筛
欧拉筛
核心思想
和数只被它最小的质因数筛去

prime_number是当前小于i的所有质数集合
p是prime_number的元素,当没有找到最小质因数pi时,p是j的最小质因数,j可以被筛去,当找到最小质因数时就要退出循环,否则不能保证p是j的最小质因数
算法的时间复杂度:O(n),到n的所有和数只被其最小的质因数筛去
java代码
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
List<Integer> arr=PrimeNumber(n);
for(int i=0;i<arr.size();i++){
System.out.println(arr.get(i));
}
}
public static List<Integer> PrimeNumber(int n){
//存储当前的所有质数
List<Integer> primes = new ArrayList<>();
//记录当前数是否被筛去
boolean[] isPrime = new boolean[n+1];
Arrays.fill(isPrime, true);
isPrime[1] = true;
for (int i = 2; i <= n; i++) {
if(isPrime[i]){primes.add(i);}
for(Integer prime : primes) {
if(i*prime >n)break;
isPrime[i*prime] = false;
if(i%prime == 0)break;
}
}
return primes;
}
}

浙公网安备 33010602011771号