Олимпиадный тренинг

Задача . E. Периодические числа


Непустая строка s называется бинарной, если она состоит только из символов «0» и «1». Пронумеруем символы бинарной строки s от 1 до длины строки и обозначим i-й символ строки s как si.

Бинарную строку s длины n будем называть периодической, если существует целое число 1 ≤ k < n такое, что:

  • k — делитель числа n
  • для всех 1 ≤ i ≤ n - k выполняется si = si + k

Например, бинарные строки «101010» и «11» являются периодическими, а «10» и «10010» — нет.

Целое положительное число x будем называть периодическим, если бинарная строка, являющаяся записью числа x в двоичной системе счисления (без лидирующих нулей), — периодическая.

Ваша задача — найти количество периодических чисел в отрезке от l до r (оба конца включены).

Входные данные

В единственной строке входных данных записаны два целых числа l и r (1 ≤ l ≤ r ≤ 1018). Числа разделены пробелом.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите единственное целое число — количество периодических чисел в отрезке от l до r (оба конца включены).

Примечание

В первом примере периодическими числами являются 3, 7 и 10.

Во втором примере периодическими числами являются 31 и 36.


Примеры
Входные данныеВыходные данные
1 1 10
3
2 25 38
2

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w644
Комментарий учителя