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 翻译