123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- #!/usr/bin/ruby
- # Daniel "Trizen" Șuteu
- # Date: 14 February 2021
- # https://github.com/trizen
- # Generate k-almost prime numbers <= n. (not in sorted order)
- # See also:
- # https://en.wikipedia.org/wiki/Almost_prime
- func almost_prime_numbers(n, k, callback) {
- if (k == 1) {
- return n.each_prime(callback)
- }
- func (m, lo, k) {
- if (k == 1) {
- each_prime(lo, idiv(n, m), {|q|
- callback(m*q)
- })
- return nil
- }
- var hi = idiv(n,m).iroot(k)
- each_prime(lo, hi, {|q|
- __FUNC__(m*q, q, k-1)
- })
- }(1, 2, k)
- return callback
- }
- var n = 100
- var k = 4
- say gather {
- almost_prime_numbers(n, k, { take(_) })
- }
- __END__
- [16, 24, 40, 56, 88, 36, 60, 84, 100, 54, 90, 81]
|