| 1234567891011121314151617181920212223242526272829303132333435363738 |
- import java.util.ArrayList;
- import java.util.LinkedList;
- import java.util.List;
- import java.util.stream.Collectors;
- import java.util.stream.IntStream;
-
- public class Sieve {
-
- private int maximalPrime;
- private List<Integer> primes;
-
- public Sieve(int maximalPrime) {
- this.maximalPrime = maximalPrime;
- this.primes = calculatePrimes();
- }
-
- public List<Integer> getPrimes() {
- return primes;
- }
-
- private List<Integer> calculatePrimes() {
- List<Integer> primes = new ArrayList<>();
- LinkedList<Integer> candidates = IntStream.range(2, maximalPrime + 1)
- .boxed()
- .collect(Collectors.toCollection(LinkedList::new));
-
- while (candidates.size() > 0) {
- Integer prime = candidates.remove();
- primes.add(prime);
- candidates = candidates.stream()
- .filter(x -> x % prime != 0)
- .collect(Collectors.toCollection(LinkedList::new));
- }
-
- return primes;
- }
- }
|