package LinkedList_study;
import java.util.*;
public class Sieve {
public static void main(String[] args){
System.out.println("该程序用于找出小于某个给定数字的所有素数");
System.out.println();
Scanner console = new Scanner(System.in);
System.out.println("请输入一个最大数字");
int max = console.nextInt();
// 定义变量timeBeforeRun为初始时间
long timeBeforeRun = System.currentTimeMillis();
List<Integer> primes = sieve(max);
// 定义变量timeAfterRun为调用方法后的结束时间
long timeAfterRun = System.currentTimeMillis();
System.out.println("小于" + max +"的数字有:");
System.out.println(primes);
System.out.println("sieve方法所用时间为:" + (timeAfterRun - timeBeforeRun) + " 毫秒");
}
// 返回给定最大值的所有素数数字的列表
public static List<Integer> sieve(int max){
List<Integer> primes = new LinkedList<Integer>();
// 将2-max之间的所有整数添加至numbers列表
List<Integer> numbers = new LinkedList<Integer>();
for(int i = 2; i <= max;i++){
numbers.add(i);
}
while(!numbers.isEmpty()){
// 从列表的前面删除一个素数
int front = numbers.remove(0);
primes.add(front);
// 删除此素数的所有倍数
Iterator<Integer> itr = numbers.iterator();
while (itr.hasNext()){
int current = itr.next();
if(current % front == 0) {
itr.remove();
}
}
}
return primes;
}
}
运行结果: