import java.math.BigInteger; public class Triples{ public static BigInteger LIMIT; public static final BigInteger TWO = BigInteger.valueOf(2); public static final BigInteger THREE = BigInteger.valueOf(3); public static final BigInteger FOUR = BigInteger.valueOf(4); public static final BigInteger FIVE = BigInteger.valueOf(5); public static long primCount = 0; public static long tripCount = 0; //I don't know Japanese :p public static void parChild(BigInteger a, BigInteger b, BigInteger c){ BigInteger perim = a.add(b).add(c); if(perim.compareTo(LIMIT) > 0) return; primCount++; tripCount += LIMIT.divide(perim).longValue(); BigInteger a2 = TWO.multiply(a), b2 = TWO.multiply(b), c2 = TWO.multiply(c), c3 = THREE.multiply(c); parChild(a.subtract(b2).add(c2), a2.subtract(b).add(c2), a2.subtract(b2).add(c3)); parChild(a.add(b2).add(c2), a2.add(b).add(c2), a2.add(b2).add(c3)); parChild(a.negate().add(b2).add(c2), a2.negate().add(b).add(c2), a2.negate().add(b2).add(c3)); } public static void main(String[] args){ for(long i = 100; i <= 10000000; i*=10){ LIMIT = BigInteger.valueOf(i); primCount = tripCount = 0; parChild(THREE, FOUR, FIVE); System.out.println(LIMIT + ": " + tripCount + " triples, " + primCount + " primitive."); } } }