2016-01-29 53 views
1

如何在不使用isProbablePrime()函数的情况下从java中的BigInteger流过滤素数?过滤来自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()中查找素数。希望有所帮助。 –