2016-01-29 2 views
1

Как фильтровать простые числа из потока BigIntegers в java без использования функции isProbablePrime()?Фильтровать простые числа из потока BigIntegers

Я попробовал этот код, но не может решить ошибку:

List<BigInteger> x =bigIntList.stream().filter(n->n >1 && IntStream.range(2,n).noneMatch(index->n%index==0)).collect(Collectors.toList()); 
+1

Грубая сила, цикл от 2 до SQRT (NUM) и разделите по пути .. – nicomp

+0

@Pritam Я попытался с помощью isProbablePrime(), но не могу понять эту идею, не используя его. –

ответ

1

Что-то, как это должно помочь:

public static boolean isBigPrime(BigInteger n) { 
    if (n.compareTo(new BigInteger("2")) < 0) return false; 
    else if (n.compareTo(new BigInteger("2")) == 0) return true; 
    for (BigInteger i = new BigInteger("2"); i.compareTo(n.divide(new BigInteger("2"))) < 0; i = i.add(BigInteger.ONE)) 
     if (n.mod(i).equals(BigInteger.ZERO)) 
      return false; 
    return true; 
} 

Для более см here.

Так вы используете Stream.

List<BigInteger> prime = l.stream().filter(b -> b.isProbablePrime(1) == true).collect(Collectors.toList()); 
+0

Это полезно, но я просил код, чтобы получить список простых чисел из потока BigIntegers. –

+0

@asteriskbimal Я изменил код, чтобы найти простые числа из stream(). Надеюсь, это поможет. –