# Find numbers with K odd divisors in a given range

Given two numbers a and b, and a number k which is odd. The task is to find all the numbers between a and b (both inclusive) having exactly k divisors.

Examples:

```Input : a = 2, b = 49, k = 3
Output: 4
// Between 2 and 49 there are four numbers
// with three divisors
// 4 (Divisors 1, 2, 4), 9 (Divisors 1, 3, 9),
// 25 (Divisors 1, 5, 25} and 49 (1, 7 and 49)

Input : a = 1, b = 100, k = 9
Output: 2
// between 1 and 100 there are 36 (1, 2, 3, 4, 6, 9, 12, 18, 36)
// and 100 (1, 2, 4, 5, 10, 20, 25, 50, 100) having exactly 9
// divisors
```

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

This problem has simple solution, here we are given that k is odd and we know that only perfect square numbers have odd number of divisors , so we just need to check all perfect square numbers between a and b, and calculate divisors of only those perfect square numbers.

## C++

 `// C++ program to count numbers with k odd ` `// divisors in a range. ` `#include ` `using` `namespace` `std; ` ` `  `// Utility function to check if number is ` `// perfect square or not ` `bool` `isPerfect(``int` `n) ` `{ ` `    ``int` `s = ``sqrt``(n); ` ` `  `    ``return` `(s*s == n); ` `} ` ` `  `// Utility Function to return count of divisors ` `// of a number ` `int` `divisorsCount(``int` `n) ` `{ ` `    ``// Note that this loop runs till square root ` `    ``int` `count=0; ` `    ``for` `(``int` `i=1; i<=``sqrt``(n)+1; i++) ` `    ``{ ` `        ``if` `(n%i==0) ` `        ``{ ` `            ``// If divisors are equal, count it ` `            ``// only once ` `            ``if` `(n/i == i) ` `                ``count += 1; ` ` `  `            ``// Otherwise print both ` `            ``else` `                ``count += 2; ` `        ``} ` `    ``} ` `    ``return` `count; ` `} ` ` `  `// Function to calculate all divisors having ` `// exactly k divisors  between a and b ` `int` `kDivisors(``int` `a,``int` `b,``int` `k) ` `{ ` `    ``int` `count = 0; ``// Initialize result ` ` `  `    ``// calculate only for perfect square numbers ` `    ``for` `(``int` `i=a; i<=b; i++) ` `    ``{ ` `        ``// check if number is perfect square or not ` `        ``if` `(isPerfect(i)) ` ` `  `            ``// total divisors of number equals to ` `            ``// k or not ` `            ``if` `(divisors(i) == k) ` `                ``count++; ` ` `  `    ``} ` `    ``return` `count; ` `} ` ` `  `// Driver program to run the case ` `int` `main() ` `{ ` `    ``int` `a = 2, b = 49, k = 3; ` `    ``cout << kDivisors(a, b, k); ` `    ``return` `0; ` `} `

## java

 `// Java program to count numbers ` `// with k odd divisors in a range. ` `import` `java.io.*; ` `import` `java.math.*; ` ` `  `class` `GFG { ` `     `  `    ``// Utility function to check if  ` `    ``// number is perfect square or not ` `    ``static` `boolean` `isPerfect(``int` `n) ` `    ``{ ` `        ``int` `s = (``int``)(Math.sqrt(n)); ` `     `  `        ``return` `(s*s == n); ` `    ``} ` `     `  `    ``// Utility Function to return  ` `    ``// count of divisors of a number ` `    ``static` `int` `divisorsCount(``int` `n) ` `    ``{ ` `        ``// Note that this loop  ` `        ``// runs till square root ` `        ``int` `count=``0``; ` `         `  `      ``for` `(``int` `i = ``1``; i <= Math.sqrt(n) + ``1``; i++) ` `      ``{ ` `        ``if` `(n % i == ``0``) ` `        ``{ ` `                 `  `            ``// If divisors are equal, ` `            ``// count it only once ` `            ``if` `(n / i == i) ` `                ``count += ``1``; ` ` `  `            ``// Otherwise print both ` `            ``else` `                ``count += ``2``; ` `        ``} ` `      ``} ` `        ``return` `count; ` `    ``} ` `     `  `    ``// Function to calculate all  ` `    ``// divisors having exactly k  ` `    ``// divisors between a and b ` `    ``static` `int` `kDivisors(``int` `a,``int` `b,``int` `k) ` `    ``{ ` `        ``// Initialize result ` `        ``int` `count = ``0``;  ` `     `  `        ``// calculate only for  ` `        ``// perfect square numbers ` `        ``for` `(``int` `i = a; i <= b; i++) ` `        ``{ ` `            ``// check if number is  ` `            ``// perfect square or not ` `            ``if` `(isPerfect(i)) ` `     `  `                ``// total divisors of number ` `                ``// equals to k or not ` `                ``if` `(divisorsCount(i) == k) ` `                    ``count++; ` `     `  `        ``} ` `        ``return` `count; ` `    ``} ` `     `  `    ``// Driver program to run the case ` `    ``public` `static` `void` `main(String args[]) ` `    ``{ ` `        ``int` `a = ``21``, b = ``149``, k = ``333``; ` `        ``System.out.println(kDivisors(a, b, k)); ` `    ``} ` `} ` ` `  `// This code is contributed by Nikita Tiwari. `

## Python3

 `# Python3 program to count numbers ` `# with k odd divisors in a range. ` `import` `math ` ` `  `# Utility function to check if number  ` `# is perfect square or not ` `def` `isPerfect(n) : ` `    ``s ``=` `math.sqrt(n) ` ` `  `    ``return` `(s ``*` `s ``=``=` `n) ` ` `  `# Utility Function to return  ` `# count of divisors of a number ` `def` `divisorsCount(n) : ` `     `  `    ``# Note that this loop runs till  ` `    ``# square root ` `    ``count ``=` `0` `    ``for` `i ``in` `range``(``1``, (``int``)(math.sqrt(n) ``+` `2``)) : ` `         `  `        ``if` `(n ``%` `i ``=``=` `0``) : ` `            ``# If divisors are equal,  ` `            ``# counbt it only once ` `            ``if` `(n ``/``/` `i ``=``=` `i) : ` `                ``count ``=` `count ``+` `1` ` `  `            ``# Otherwise print both ` `            ``else` `: ` `                ``count ``=` `count ``+` `2` `         `  `    ``return` `count ` `     `  `# Function to calculate all divisors having ` `# exactly k divisors between a and b ` `def` `kDivisors(a, b, k) : ` `    ``count ``=` `0` `# Initialize result ` ` `  `    ``# calculate only for perfect square numbers ` `    ``for` `i ``in` `range``(a, b ``+` `1``) : ` `         `  `        ``# check if number is perfect square or not ` `        ``if` `(isPerfect(i)) : ` `            ``# total divisors of number equals to ` `            ``# k or not ` `            ``if` `(divisorsCount(i) ``=``=` `k) : ` `                ``count ``=` `count ``+` `1` ` `  `    ``return` `count ` ` `  `# Driver program to run the case ` `a ``=` `2` `b ``=` `49` `k ``=` `3` `print``(kDivisors(a, b, k)) ` ` `  `# This code is contributed by Nikita Tiwari. `

## C#

 `// C# program to count numbers with ` `// k odd divisors in a range. ` `using` `System; ` ` `  `class` `GFG { ` `     `  `    ``// Utility function to check if number  ` `    ``// is perfect square or not ` `    ``static` `bool` `isPerfect(``int` `n) ` `    ``{ ` `        ``int` `s = (``int``)(Math.Sqrt(n)); ` `     `  `        ``return` `(s * s == n); ` `    ``} ` `     `  `    ``// Utility Function to return  ` `    ``// count of divisors of a number ` `    ``static` `int` `divisorsCount(``int` `n) ` `    ``{ ` `        ``// Note that this loop  ` `        ``// runs till square root ` `        ``int` `count=0; ` `         `  `    ``for` `(``int` `i = 1; i <= Math.Sqrt(n) + 1; i++) ` `    ``{ ` `        ``if` `(n % i == 0) ` `        ``{ ` `                 `  `            ``// If divisors are equal, ` `            ``// count it only once ` `            ``if` `(n / i == i) ` `                ``count += 1; ` ` `  `            ``// Otherwise print both ` `            ``else` `                ``count += 2; ` `        ``} ` `    ``} ` `        ``return` `count; ` `    ``} ` `     `  `    ``// Function to calculate all  ` `    ``// divisors having exactly k  ` `    ``// divisors between a and b ` `    ``static` `int` `kDivisors(``int` `a, ``int` `b,  ` `                         ``int` `k) ` `    ``{ ` `        ``// Initialize result ` `        ``int` `count = 0;  ` `     `  `        ``// calculate only for  ` `        ``// perfect square numbers ` `        ``for` `(``int` `i = a; i <= b; i++) ` `        ``{ ` `            ``// check if number is  ` `            ``// perfect square or not ` `            ``if` `(isPerfect(i)) ` `     `  `                ``// total divisors of number ` `                ``// equals to k or not ` `                ``if` `(divisorsCount(i) == k) ` `                    ``count++; ` `     `  `        ``} ` `        ``return` `count; ` `    ``} ` `     `  `    ``// Driver Code ` `    ``public` `static` `void` `Main(String []args) ` `    ``{ ` `        ``int` `a = 21, b = 149, k = 333; ` `        ``Console.Write(kDivisors(a, b, k)); ` `    ``} ` `} ` ` `  `// This code is contributed by Nitin Mittal. `

## PHP

 ` `

Output:

```4
```

This problem can be solved more efficiently. Please refer method 2 of below post for an efficient solution.

Number of perfect squares between two given numbers

This article is contributed by Shashank Mishra ( Gullu ). If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

My Personal Notes arrow_drop_up

Improved By : nitin mittal

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.