Sphenic numbers

func sphenic_numbers(upto) {
    3.squarefree_almost_primes(upto)
}

func sphenic_triplets(upto) {
    var S = sphenic_numbers(upto)
    S.grep_kv {|k,v| v+2 == S[k+2] }.map{ [_, _+1, _+2] }
}

with (1e3) {|n|
    say "Sphenic numbers less than #{n.commify}:"
    sphenic_numbers(n-1).slices(15).each{.map{'%4s' % _}.join.say}
}

with (1e4) {|n|
    say "\nSphenic triplets less than #{n.commify}:"
    sphenic_triplets(n-1).each{.say}
}

with (1e6) {|n|
    var triplets = sphenic_triplets(n-1)
    say "\nThere are #{3.squarefree_almost_prime_count(n-1)} sphenic numbers less than #{n.commify}."
    say "There are #{triplets.len} sphenic triplets less than #{n.commify}."
    with (2e5) {|n| say "The #{n.commify}th sphenic number is: #{nth_squarefree_almost_prime(n, 3)}." }
    with (5e3) {|n| say "The #{n.commify}th sphenic triplet is: #{triplets[n-1]}." }
}

Output:

Last updated

Was this helpful?