first(n) = { my(i); res = vector(n); maxn = n; inc = 5*10^6; printat = inc; qchecks = 0; for(i = 1, n, process(i, i) ); concat(1, res) } process(sumsofar, lastTerm) = { qchecks++; if(qchecks > printat, print(printat \ inc" "res); printat+=inc; ); my(i); res[sumsofar]++; for(i = 2*lastTerm + 1, maxn - sumsofar, process(sumsofar+i, i); ); if(!bitand(lastTerm, 1) && sumsofar + lastTerm>>1 <= maxn, process(sumsofar+lastTerm>>1, lastTerm>>1) ) }