46 lines
755 B
Text
46 lines
755 B
Text
func almost_primes(a, b, k) {
|
|
|
|
a = max(2**k, a)
|
|
var arr = []
|
|
|
|
func (m, lo, k) {
|
|
|
|
var hi = idiv(b,m).iroot(k)
|
|
|
|
if (k == 1) {
|
|
|
|
lo = max(lo, idiv_ceil(a, m))
|
|
|
|
each_prime(lo, hi, {|p|
|
|
arr << m*p
|
|
})
|
|
|
|
return nil
|
|
}
|
|
|
|
each_prime(lo, hi, {|p|
|
|
|
|
var t = m*p
|
|
var u = idiv_ceil(a, t)
|
|
var v = idiv(b, t)
|
|
|
|
next if (u > v)
|
|
|
|
__FUNC__(t, p, k-1)
|
|
})
|
|
}(1, 2, k)
|
|
|
|
return arr.sort
|
|
}
|
|
|
|
for k in (1..5) {
|
|
var (x=10, lo=1, hi=2)
|
|
var arr = []
|
|
loop {
|
|
arr += almost_primes(lo, hi, k)
|
|
break if (arr.len >= x)
|
|
lo = hi+1
|
|
hi = 2*lo
|
|
}
|
|
say arr.first(x)
|
|
}
|