CF215E Periodical Numbers
题目描述
如果一个非空字符串 $s$ 只包含字符 "0" 和 "1",那么称其为二进制字符串。我们将二进制字符串 $s$ 的字符从 1 到字符串的长度进行编号,记第 $i$ 个字符为 $s_i$。
长度为 $n$ 的二进制字符串 $s$ 被称为周期串,如果存在一个整数 $1 \le k < n$,满足以下条件:
- $k$ 是 $n$ 的约数;
- 对于所有 $1 \le i \le n-k$,都有 $s_i = s_{i+k}$。
例如,二进制字符串 "101010" 和 "11" 是周期串,而 "10" 和 "10010" 则不是。
如果一个正整数 $x$ 的二进制表示(不含前导零)是周期串,则称 $x$ 为周期数。
你的任务是计算区间 $[l, r]$(包括两端)内有多少个周期数。
输入格式
输入包含一行,包含两个整数 $l$ 和 $r$($1 \le l \le r \le 10^{18}$)。两个数字之间用一个空格分隔。
输出格式
输出一个整数,表示区间 $[l, r]$ 内的周期数的个数。
说明/提示
在第一个样例中,周期数为 $3$,$7$ 和 $10$。
在第二个样例中,周期数为 $31$ 和 $36$。
由 ChatGPT 5 翻译