seen = 0 head = vector(100) \\ enough to compute a(n) up to 2^100 compute(n) = { my (m=1, b=binary(n)); for (i=2, #b, if (b[i], m = lcm(m, head[i]); ); ); forstep(v=m, oo, m, if (!bittest(seen, v), if (n<=#head, head[n] = v; ); seen += 2^v; return (v); ); ); } for (n=1, 10 000, print (n " " compute(n))) quit