ai * bk * ck * ... <= n
Observe that if r is in the output stream then,
a*r, b*r, c*r, ... <= n
are also in the output stream.
The problem tests a languages's ability to express recursive stream computations and producer/consumer parallelism, and to support dynamic task creation.