Coprime triplets
func coprime_triplets(callback) {
var (
list = [1,2],
a = 1,
b = 2,
k = 3,
seen = Set()
)
loop {
for (var n = k; true; ++n) {
if (!seen.has(n) && is_coprime(n, a) && is_coprime(n, b)) {
list << n
seen << n
callback(list) && return list
(a, b) = (b, n)
while (seen.has(k)) {
seen.remove(k++)
}
break
}
}
}
}
say "Coprime triplets before first term is > 50:"
coprime_triplets({|list|
list.tail >= 50
}).first(-1).slices(10).each { .«%« '%4d' -> join(' ').say }
say "\nLeast Coprime triplets that encompass 1 through 50:"
coprime_triplets({|list|
list.sort.first(50) == @(1..50)
}).slices(10).each { .«%« '%4d' -> join(' ').say }
say "\n1001st through 1050th Coprime triplet:"
coprime_triplets({|list|
list.len == 1050
}).last(50).slices(10).each { .«%« '%4d' -> join(' ').say }Output:
Last updated
Was this helpful?