todualzeck0(n) = { my (s=0, v=0); for (i=0, oo, if (s>=n, forstep (j=i-1, 0, -1, if (s-fibonacci(2+j)>=n, s-=fibonacci(2+j); v-=2^j;);); return (v);); s+=fibonacci(2+i); v+=2^i;); } cache = [todualzeck0(1)] todualzeck(n) = { while (#cache < n, cache = concat(cache, apply (todualzeck0, [#cache+1..2*#cache])); ); cache[n]; } missing(n) = { 2^#binary(n)-1-n; } s = 0 unseen = 1 seen(v) = bittest(s, v) see(v) = s = bitor(s, 2^v); while (seen(unseen), unseen++) other(n) = { my (mn = missing(todualzeck(n))); for (v = unseen, oo, if (!seen(v) && bitand(missing(todualzeck(v)), mn)==0, see(v); return (v); ); ); } { print ("0 0"); for (n = 1, fibonacci(23)-2, print (n " " other(n)); ); } quit