2026-03-12 20:57:32 +09:00

34 lines
688 B
Swift

var dp: [Int64] = Array(repeating: 0, count: 55)
for n in 1...54 {
dp[n] = 2*dp[n-1] + (1 << (n-1))
}
func countOne(_ N: Int64) -> Int64 {
var res: Int64 = 0
var n: Int64 = N
for i in stride(from: 54, to: 0, by: -1) {
let LSB: Int64 = (1 << (i-1)) & n
if LSB != 0{
res += dp[i-1]
res += n - (1 << (i-1)) + 1
}
n &= ((1 << (i-1)) - 1)
}
return res
}
func main() {
guard let input = readLine() else { return }
let nums: [Int64] = input.split(separator: " ").compactMap{Int64($0)}
let ans: Int64 = countOne(nums[1]) - countOne(nums[0]-1)
print(ans)
}
main()