s = 0 unseen = 1 seen(v) = bit test(s, v) see(v) = s = bit or(s, 2^v); while (seen(unseen), unseen++) skip = vector(1000, k, k) div = vector(10 000) d = 0 dd(v) = [1..v] { for (n=1, #div, if (div[n]==0, for (w=unseen, oo, if (!seen(w), t = dd(w); if (w%t[1]==0, v=w; break; ); ); ), div[n]<=#skip, while (seen(skip[div[n]]), skip[div[n]] += div[n]; ); v = skip[div[n]], forstep (w=ceil(unseen/div[n])*div[n], oo, div[n], if (!seen(w), v=w; break; ); ); ); print (n " " v); see(v); if (d<#div, t = dd(v); for (k=1, #t, div[d++] = t[k]; if (d==#div, break; ); ); ); ); } quit