B. New Year and Old Property

問題

整数$a,b$が与えられる。($1 \le a,b \le 10^{18}$) 整数$c$で、$a \le c \le b$であり、2進表記したとき丁度ひとつだけ0を含むものの数を答えよ。

解法

2進数111...1110111...111の形の整数を全部試せばよい。 多倍長整数で殴る。

実装

#!/usr/bin/env python3
a, b = map(int,input().split())
cnt = 0
for i in range(2,64*8):
    for j in range(1,i):
        c = ['1'] * i
        c[j] = '0'
        c = int(''.join(c), 2)
        if a <= c <= b:
            cnt += 1
print(cnt)