A   k-Almost-prime   is a natural number   



n


{\displaystyle n}

   that is the product of   



k


{\displaystyle k}

   (possibly identical) primes.



Example

1-almost-primes,   where   



k
=
1


{\displaystyle k=1}

,   are the prime numbers themselves.

2-almost-primes,   where   



k
=
2


{\displaystyle k=2}

,   are the   semiprimes.



Task

Write a function/method/subroutine/... that generates k-almost primes and use it to create a table here of the first ten members of k-Almost primes for   



1
<=
K
<=
5


{\displaystyle 1<=K<=5}

.



Related tasks

   Semiprime
   Category:Prime Numbers


struct KPrimeGen: Sequence, IteratorProtocol {
  let k: Int
  private(set) var n: Int
 
  private func isKPrime() -> Bool {
    var primes = 0
    var f = 2
    var rem = n
 
    while primes < k && rem > 1 {
      while rem % f == 0 && rem > 1 {
        rem /= f
        primes += 1
      }
 
      f += 1
    }
 
    return rem == 1 && primes == k
  }
 
  mutating func next() -> Int? {
    n += 1
 
    while !isKPrime() {
      n += 1
    }
 
    return n
  }
}
 
for k in 1..<6 {
  print("\(k): \(Array(KPrimeGen(k: k, n: 1).lazy.prefix(10)))")
}