explore(mi, rem, s, base) = { ls = min(ls, s+rem); my (d=digits(rem,base)); for (w=max(1,#digits(mi,base)), #d\2, if (d[w+1], my (lhs = fromdigits(d[1..w],base), rhs=fromdigits(d[w+1..#d],base)); if (mi < lhs && lhs < rhs, explore(lhs, rhs, s+lhs, base); ); ); ); } a(n, base=2) = { ls = oo; explore(0, n, 0, base); return (ls); } for (n=1, 2^14, print (n " " a(n))) quit