tozeck(n) = { for (i=0, oo, if (n<=fibonacci(2+i), my (v=0, f); forstep (j=i, 0, -1, if (n>=f=fibonacci(2+j), n-=f; v+=2^j; ); if (n==0, return (v); ); ); ); ); } fromzeck(n) = { my (v=0, j); while (n, n-=2^j=valuation(n,2); v+=fibonacci(2+j); ); return (v); } todualzeck(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; ); } row(n) = { my (z = todualzeck(n), r = vector(hammingweight(z)), b); for (k=1, #r, z -= b = 2^valuation(z, 2); r[k] = fromzeck(b); ); r } { m = 0; for (n = 1, fibonacci(16)-2, r = row(n); apply (v -> print (m++ " " v), r); ); } quit