tribonacci(n) = ([0,1,0; 0,0,1; 1,1,1]^n)[2,1] totrib(n) = { for (i=0, oo, if (n<=tribonacci(3+i), my (v=0, f); forstep (j=i, 0, -1, if (n>=f=tribonacci(3+j), n-=f; v+=2^j; ); if (n==0, return (v); ); ); ); ); } fromtrib(n) = { my (v=0, j); while (n, n-=2^j=valuation(n,2); v+=tribonacci(3+j); ); return (v); } todualtrib(n) = { my (s=0, v=0); for (i=0, oo, if (s>=n, forstep (j=i-1, 0, -1, if (s-tribonacci(3+j)>=n, s-=tribonacci(3+j); v-=2^j; ); ); return (v); ); s+=tribonacci(3+i); v+=2^i; ); } bits(n) = { my (b=vector(hammingweight(n))); for (k=1, #b, n-=2^b[k]=valuation(n,2)); return (b); } row(n) = { apply(b -> tribonacci(3+b), bits(totrib(n))) } { m=0; for (n=1, tribonacci(15), apply (v -> print (m++ " " v), row(n)); ); } quit