var = -1 def popcount(x): '''xの立っているビット数をカウントする関数 (xは64bit整数)''' # 2bitごとの組に分け、立っているビット数を2bitで表現する x = x - ((x >> 1) & 0x5555555555555555) # 4bit整数に 上位2bit + 下位2bit を計算した値を入れる x = (x & 0x3333333333333333) + ((x >> 2) & 0x3333333333333333) x = (x + (x >> 4)) & 0x0f0f0f0f0f0f0f0f # 8bitごと x = x + (x >> 8) # 16bitごと x = x + (x >> 16) # 32bitごと x = x + (x >> 32) # 64bitごと = 全部の合計 return x & 0x0000007f def calc(i, n, count): global var tile_list.append(i) num = i + popcount(i) if num == n: var = count + 1 if num < n: calc(num, n, count+1) num = i - popcount(i) if not num in tile_list and num > 0: calc(num, n, count+1) n = int(input()) tile_list = list() i = 1 count = 1 calc(i, n, count) print(var)