classSolution: deffindMaximumNumber(self, k: int, x: int) -> int: defcountDigit(num: int) -> int: s = bin(num)[2:] n = len(s) @cache deff(i:int, cnt:int, is_limit:bool) -> int: if i == len(s): return cnt res = 0 up = int(s[i]) if is_limit else1 for d inrange(up+1): res += f(i+1, cnt+ (d==1and ((n-i)%x == 0)) , is_limit and d == up) return res return f(0, 0, True) num_lim = (k+1) << x l = 0 r = num_lim while l <= r: m = (l+r) >> 1 cnt = countDigit(m) if cnt > k: r = m-1 elif cnt <= k: l = m+1 return r