n-smooth   numbers are positive integers which have no prime factors  >  n.

The   n   (when using it in the expression)   n-smooth   is always prime,

there are   no   9-smooth numbers.

1   (unity)   is always included in n-smooth numbers.




2-smooth   numbers are non-negative powers of two.

5-smooth   numbers are also called   Hamming numbers.

7-smooth   numbers are also called    humble   numbers.



A way to express   11-smooth   numbers is:

  11-smooth  =  2i × 3j × 5k × 7m × 11p

           where     i, j, k, m, p ≥ 0  



Task

   calculate and show the first   25   n-smooth numbers   for   n=2   ───►   n=29
   calculate and show   three numbers starting with   3,000   n-smooth numbers   for   n=3   ───►   n=29
   calculate and show twenty numbers starting with  30,000   n-smooth numbers   for   n=503   ───►   n=521   (optional)


All ranges   (for   n)   are to be inclusive, and only prime numbers are to be used.

The (optional) n-smooth numbers for the third range are:   503,   509,   and   521.

Show all n-smooth numbers for any particular   n   in a horizontal list.

Show all output here on this page.



Related tasks

   Hamming numbers
   humble numbers


References

   Wikipedia entry:   Hamming numbers     (this link is re-directed to   Regular number).
   Wikipedia entry:   Smooth number
   OEIS entry:   A000079    2-smooth numbers or non-negative powers of two
   OEIS entry:   A003586    3-smooth numbers
   OEIS entry:   A051037    5-smooth numbers or Hamming numbers
   OEIS entry:   A002473    7-smooth numbers or humble numbers
   OEIS entry:   A051038   11-smooth numbers
   OEIS entry:   A080197   13-smooth numbers
   OEIS entry:   A080681   17-smooth numbers
   OEIS entry:   A080682   19-smooth numbers
   OEIS entry:   A080683   23-smooth numbers


 
function isPrime(n){
    var x = Math.floor(Math.sqrt(n)), i = 2
 
    while ((i <= x) && (n % i != 0)) i++
 
    return (x < i)
}
 
function smooth(n, s, k){
    var p = []
    for (let i = 2; i <= n; i++){
        if (isPrime(i)){
            p.push([BigInt(i), [1n], 0])
        }
    }
 
    var res = []
    for (let i = 0; i < s + k; i++){
        var m = p[0][1][p[0][2]]
 
        for (let j = 1; j < p.length; j++){
            if (p[j][1][p[j][2]] < m) m = p[j][1][p[j][2]]
        }
 
        for (let j = 0; j < p.length; j++){
            p[j][1].push(p[j][0]*m)
            if (p[j][1][p[j][2]] == m) p[j][2]++
        }
 
        res.push(m)
    }
 
    return res.slice(s-1, s-1+k);
}
 
// main 
 
var sOut = ""
 
for (let x of [[2, 29, 1, 25], [3, 29, 3000, 3], [503, 521, 30000, 20]]){
    for (let n = x[0]; n <= x[1]; n++){
        if (isPrime(n)){
            sOut += x[2] + " to " + (x[2] - 1 + x[3]) + " " + n + "-smooth numbers: " + smooth(n, x[2], x[3]) + "\n"
        }
    }
}
 
console.log(sOut)
 