Q0 := proc(n) option remember; local fib, d, subval; fib := [0,1]; while fib[-1] < n do fib := [op(fib), fib[-1]+fib[-2]]; od; fib := {seq(f, f in fib)}; d := convert(n, base, 2); subval := {seq(seq(add(d[m]*2^(m-p), m=p..q), q = p .. nops(d)), p = 1 .. nops(d))}; nops(fib intersect subval); end;