Given three integers a, b, n .Your task is to print number of numbers between a and b including them also which have n-divisors. A number is called n-divisor if it has total n divisors including 1 and itself.
Input : a = 1, b = 7, n = 2 Output : 4 There are four numbers with 2 divisors in range [1, 7]. The numbers are 2, 3, 5, and 7.
The naive approach is to check all the numbers between a and b how many of them are n-divisor number for doing this find out the number of each divisors for each number . If it is equal to n then it is a n-divisor number
Any number can be written in the form of its prime factorization let the number be x and p1, p2..pm are the prime numbers which divide x so x = p1e1 * p2e2….pmem where e1, e2…em are the exponents of prime numbers p1, p2….pm. So the number of divisors of x will be (e1+1)*(e2+1)…*(em+1).
Now the second observation is for prime numbers greater than sqrt(x) their exponent cannot exceed 1. Let’s prove this by contradiction suppose there is a prime number P greater than sqrt(x) and its exponent E in prime factorization of x is greater than one (E >= 2) so P^E sqrt(x) so P^E > (sqrt(x))E and E >= 2 so PE will always be greater than x
Third observation is that number of prime numbers greater than sqrt(x) in the prime factorization of x will always be less than equal to 1. This can also be proved similarly by contradiction as above.
Now to solve this problem
Step 1: Apply sieve of eratosthenes and calculate prime numbers upto sqrt(b).
Step 2: Traverse through each number from a to b and calculate exponents of each prime number in that number by repeatedly dividing that number by prime number and use the formula numberofdivisors(x) = (e1+1)*(e2+1)….(em+1).
Step 3: If after dividing by all the prime numbers less than equal to square root of that number if number > 1 this means there is a prime number greater than its square root which divides and its exponent will always be one as proved above.
This article is contributed by Ayush Jha. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
- Number of ways to obtain each numbers in range [1, b+c] by adding any two numbers in range [a, b] and [b, c]
- Find numbers with K odd divisors in a given range
- Find a range of composite numbers of given length
- Program to find count of numbers having odd number of divisors in given range
- C/C++ Program to find Prime Numbers between given range
- Find two distinct numbers such that their LCM lies in given range
- Count numbers from a given range that contains a given number as the suffix
- Find an integer in the given range that satisfies the given conditions
- Find the XOR of the elements in the given range [L, R] with the value K for a given set of queries
- Find the highest occurring digit in prime numbers in a range
- Find kth smallest number in range [1, n] when all the odd numbers are deleted
- Find the number of divisors of all numbers in the range [1, n]
- Find XOR of numbers from the range [L, R]
- Find all numbers between range L to R such that sum of digit and sum of square of digit is prime
- Find all the possible numbers in a range that can be evenly divided by its digits
- Count factorial numbers in a given range
- Print all Good numbers in given range
- Print prime numbers in a given range using C++ STL
- Queries for GCD of all numbers of an array except elements in a given range
- Count the numbers divisible by 'M' in a given range