I wasn't able to get true for both p and q, most of the results is both false or rarely p is true but q is false, why wouldn't this test ever be true for both p and q?
BigInteger bitSize100 = new BigInteger("1").setBit(99);
for(int i = 0; i < 20; i++) {
BigDecimal randomizer = new BigDecimal(Math.random()).multiply(new BigDecimal(bitSize100)); // get random 99 bit number
BigInteger q = randomizer.toBigInteger().setBit(99); // must be 100 bits
BigInteger p = q.add(q).add(BigInteger.ONE);
System.out.println(p.isProbablePrime(100) + " " + q.isProbablePrime(100));
}
output:
false false
false false
false false
false false
true false
false false
false false
false false
false false
false false
false false
false false
false false
false false
false false
false false
false false
false false
false false
false false