local int = require "int" local fmt = require "fmt" local limit = 1e10 local primes = int.primes(limit, true) local orm25 = {} local j = limit / 10 local count = 0 local counts = {} for i = 1, #primes - 2 do local p1 = primes[i] local p2 = primes[i + 1] local p3 = primes[i + 2] if (p2 - p1) % 18 != 0 or (p3 - p2) % 18 != 0 then continue end local key1 = 1 for int.digits(p1) as dig do key1 *= primes[dig + 1] end local key2 = 1 for int.digits(p2) as dig do key2 *= primes[dig + 1] end if key1 != key2 then continue end local key3 = 1 for int.digits(p3) as dig do key3 *= primes[dig + 1] end if key2 == key3 then if count < 25 then orm25:insert(p1) end if p1 >= j then counts:insert(count) j *= 10 end count += 1 end end counts:insert(count) print("Smallest members of first 25 Ormiston triples:") fmt.tprint("%10s ", orm25:mapped(|e| -> fmt.int(e)), 5) print() j = limit / 10 for i = 1, #counts do fmt.print("%s Ormiston triples before %s", fmt.int(counts[i]), fmt.int(j)) j *= 10 end