g := proc(n) option remember; local d, p, q, r, vals, val, m, res, v1, v2, v3; d := convert(n, base, 2); vals := {}; for p to nops(d) do for q from p to nops(d) do val := add(d[m]*2^(m-p), m=p..q); vals := {op(vals), val}; od; od; vals := sort(convert(vals minus {0}, list)); res := 0; for p to nops(vals) do v1 := vals[p]; for q from p to nops(vals) do v2 := vals[q]; for r from q to nops(vals) do v3 := vals[r]; if v1*v2 = v3 then if v1 = v2 then res := res + 1; else res := res + 2; fi; fi; od; od; od; res; end;