Количество чисел в диапазоне [L, R], которые можно представить в виде суммы двух совершенных степеней
Опубликовано: 21 Сентября, 2022
Учитывая диапазон [L, R] , задача состоит в том, чтобы найти количество чисел в диапазоне [L, R] , которые могут быть выражается в виде суммы двух совершенных степеней.
Примеры:
Input: L = 0, R = 1
Output: 2
Explanation:
The valid numbers are:
- 1 as it can be expressed as, 1 = 12 + 02.
- 0 as it can be expressed as, 0 = 02 + 02.
Therefore, the count of such numbers is 2.
Input: L = 5, R = 8
Output: 2
Explanation:
The valid numbers are:
- 5 as it can be expressed as, 5 = 12 + 22.
- 8 as it can be expressed as, 0 = 02 + 23.
Therefore, the count of such numbers is 2.
Подход: Данную задачу можно решить, используя некоторые математические наблюдения . Выполните следующие шаги, чтобы решить проблему:
- Сгенерируйте всю возможную степень всех чисел, которые меньше R , из 2 и сохраните эти числа в массиве pow[] .
- Инициализируйте логический массив, скажем, arr[] размера (R + 1) как 0 .
- Сгенерируйте все возможные различные пары массива pow[] и, если сумма пар не превышает R , пометьте ее как 1 в массиве arr[] .
- Теперь найдите сумму префиксов массива arr[] .
- После выполнения вышеуказанных шагов выведите в качестве результата значение arr[R] – arr[L – 1] .
Ниже приведена реализация вышеуказанного подхода:
Временная сложность: O(R*log(R))
Вспомогательное пространство: O(R)