: , ,
public static Stream<Integer> primeStreamEra() {
final HashMap<Integer, Integer> seedsFactors =
new HashMap<Integer, Integer>();
return IntStream.iterate(1, i -> i + 1)
.filter(i -> {
final int currentNum = i;
seedsFactors.entrySet().parallelStream()
.forEach(e -> {
while(e.getValue() < currentNum)
e.setValue(e.getValue() + e.getKey());
});
if(!seedsFactors.containsValue(i)) {
if(i != 1)
seedsFactors.put(i, i);
return true;
}
return false;
}).boxed();
}
:
public static void main(String[] args) {
primeStreamEra().forEach(i -> System.out.println(i));
}
:
, ( ).
3 .
:
- , / sqrt (currentNumber), .
- ,
false. true.
:
public static IntStream primeStream(final int limit) {
final ArrayList<Integer> primes = new ArrayList<Integer>();
IntStream primesThreeToLimit =
IntStream.iterate(3, i -> i + 2)
.takeWhile(i -> i <= limit)
.filter(i -> {
final int testUntil = (int) Math.sqrt((double) limit);
for(Integer p: primes) {
if(i % p == 0) return false;
if(p > testUntil) break;
}
primes.add(i);
return true;
});
return IntStream.concat(IntStream.of(1,2), primesThreeToLimit);
}
:
public static void main(String[] args) {
System.out.println(Arrays.toString(primeStream(50).toArray()));
}
: [1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
: IntStream Stream<Integer> primeStream(50).boxed().