Pythagorean triples

func triples(limit) {
    var primitive = 0
    var civilized = 0
 
    func oyako(a, b, c) {
        (var perim = a+b+c) > limit || (
            primitive++
            civilized += int(limit / perim)
            oyako( a - 2*b + 2*c,  2*a - b + 2*c,  2*a - 2*b + 3*c)
            oyako( a + 2*b + 2*c,  2*a + b + 2*c,  2*a + 2*b + 3*c)
            oyako(-a + 2*b + 2*c, -2*a + b + 2*c, -2*a + 2*b + 3*c)
        )
    }
 
    oyako(3,4,5)
    "#{limit} => (#{primitive} #{civilized})"
}
 
for n (1..Inf) {
    say triples(10**n)
}

Output:

Last updated

Was this helpful?