Count of integers of the form (2^x * 3^y) in the range [L, R]
Given a range [L, R] where 0 ≤ L ≤ R ≤ 108. The task is to find the count of integers from the given range that can be represented as (2x) * (3y).
Input: L = 1, R = 10
The numbers are 1, 2, 3, 4, 6, 8 and 9
Input: L = 100, R = 200
The numbers are 108, 128, 144, 162 and 192
Approach: Since the numbers, which are powers of two and three, quickly grow, you can use the following algorithm. For all the numbers of the form (2x) * (3y) in the range [1, 108] store them in a vector. Later sort the vector. Then the required answer can be calculated using an upper bound. Pre-calculating these integers will be helpful when there are a number of queries of the form [L, R].
Below is the implementation of the above approach:
Time Complexity: O(N * log(N)), where N = logX + logY
Auxiliary Space: O(N)