i := 1; kw := 4; while kw <= n do (i := 2*i; kw := 4*kw ) r := i; dri := kw div2; ik := dri div2; while i > 1 do (i := i div2; ik := (ik div2) div2; dri := dri div2; if (kw - dri - 3*ik)<= n then r := r + i; dri := dri + 2*ik else kw := kw - dri - 3*ik; )