BigInteger x = BigInteger.valueOf(3);
BigInteger y = BigInteger.valueOf(1); // An alias for the number of red discs
while (true) {
// Check if this solution is acceptable
BigInteger sqrt = sqrt(y.multiply(y).multiply(BigInteger.valueOf(8)).add(BigInteger.ONE));
if (sqrt.testBit(0)) { // Is odd
BigInteger blue = sqrt.add(BigInteger.ONE).divide(BigInteger.valueOf(2)).add(y);
if (blue.add(y).compareTo(BigInteger.TEN.pow(12)) > 0)
return blue.toString();
}