import java.math.BigInteger; BigInteger TWO = new BigInteger("2"); ArrayList primfaktoren(BigInteger n) { ArrayList faktoren = new ArrayList(); BigInteger z = n; while (z.compareTo(BigInteger.ONE) > 0) { BigInteger p = kleinsterPrimfaktor(z); faktoren.add(p); z = z.divide(p); } return faktoren; } BigInteger kleinsterPrimfaktor(BigInteger n) { for (BigInteger p = TWO; p.compareTo(n.sqrt()) <= 0; p = p.add(BigInteger.ONE)) { if (n.mod(p).compareTo(BigInteger.ZERO) == 0) return p; } return n; } void setup() { String[] numbers = new String[] { "11", "101", "1009", "10007", "100003", "1000003", "10000019", "100000007", "1000000007", "10000000019", "100000000003", "1000000000039", "10000000000037", "100000000000031", "1000000000000037", "10000000000000061", "100000000000000003", "1000000000000000003", "10000000000000000051", "100000000000000000039", "1000000000000000000117", "10000000000000000000009", "100000000000000000000117", "1000000000000000000000007", "10000000000000000000000013", "100000000000000000000000067", "1000000000000000000000000103", "10000000000000000000000000331", "100000000000000000000000000319" }; for (String number : numbers) { long time = System.nanoTime(); ArrayList factors = primfaktoren(new BigInteger(number)); long delta = System.nanoTime() - time; println(factors, "->", delta / 100_000_000d, "sec."); } } void draw() { }