# Find numbers with K odd divisors in a given range

• Difficulty Level : Basic
• Last Updated : 23 Jun, 2022

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```

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,``            ``# count 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

 ``

## Javascript

 ``

Output:

`4`

Time Complexity: O(nsqrtn) , where n is the range of a and b
Auxiliary Space: O(1)

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 Aarti_Rathi and Shashank Mishra ( Gullu ). If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.