出题需要加法
题号:NC315376
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}对于任意一个非负整数 w,若存在两个非负整数 x,y(可以相同),使得 w=2^x+2^y,则称 w 为一个「可合数」。
\hspace{15pt}现在给定两个非负整数 L,R,请你求出区间 [L,R] 内有多少个不同的「可合数」。

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个正整数 T \left(1\leqslant T\leqslant 10^5\right),表示测试组数,每组测试数据描述如下:

\hspace{15pt}在一行上输入两个非负整数 L,R \left(0\leqslant L\leqslant R\lt 2^{63}\right),表示区间。

输出描述:

\hspace{15pt}对于每一组测试数据,新起一行输出一个非负整数,表示区间 [L,R] 内不同「可合数」的数量。
示例1

输入

复制
1
5 7

输出

复制
2

说明

\hspace{15pt}在这个样例中,区间 [5,7] 中的整数为 5,6,7。其中 5=2^2+2^06=2^2+2^1,因此 56 是「可合数」;而 7 不是「可合数」。
\hspace{15pt}所以答案为 2

备注: