# C Program for Number of elements with odd factors in given range

Given a range [** n**,

**], find the number of elements that have odd number of factors in the given range (**

*m***and**

*n***inclusive).**

*m*Examples:

Input : n = 5, m = 100 Output : 8 The numbers with odd factors are 9, 16, 25, 36, 49, 64, 81 and 100 Input : n = 8, m = 65 Output : 6 Input : n = 10, m = 23500 Output : 150

A **Simple Solution** is to loop through all numbers starting from ** n**. For every number, check if it has an even number of factors. If it has an even number of factors then increment count of such numbers and finally print the number of such elements. To find all divisors of a natural number efficiently, refer All divisors of a natural number

An **Efficient Solution** is to observe the pattern. Only those numbers, which are **perfect Squares** have an odd number of factors. Let us analyze this pattern through an example.

For example, 9 has odd number of factors, 1, 3 and 9. 16 also has odd number of factors, 1, 2, 4, 8, 16. The reason for this is, for numbers other than perfect squares, all factors are in the form of pairs, but for perfect squares, one factor is single and makes the total as odd.

**How to find number of perfect squares in a range?**

The answer is difference between square root of **m** and **n-1** (**not n**)

There is a little caveat. As both **n** and **m** are inclusive, if **n** is a perfect square, we will get an answer which is less than one the actual answer. To understand this, consider range [4, 36]. Answer is 5 i.e., numbers 4, 9, 16, 25 and 36.

But if we do (36**0.5) – (4**0.5) we get 4. So to avoid this semantic error, we take **n-1**.

`// C++ program to count number of odd squares ` `// in given range [n, m] ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `int` `countOddSquares(` `int` `n, ` `int` `m) ` `{ ` ` ` `return` `(` `int` `)` `pow` `(m, 0.5) - (` `int` `)` `pow` `(n - 1, 0.5); ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `int` `n = 5, m = 100; ` ` ` `cout << ` `"Count is "` `<< countOddSquares(n, m); ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

**Output:**

Count is 8

Time Complexity: O(1)

Please refer complete article on Number of elements with odd factors in given range for more details!

## Recommended Posts:

- C Program for Find sum of odd factors of a number
- C Program to Find minimum sum of factors of number
- C Program for efficiently print all prime factors of a given number
- C/C++ Program to find Product of unique prime factors of a number
- Generating random number in a range in C
- C/C++ Program to find sum of elements in a given array
- C/C++ Program to Find the Number Occurring Odd Number of Times
- C/C++ Program for nth Catalan Number
- C/C++ Program for n-th Fibonacci number
- C Program for factorial of a number
- C Program for Sum the digits of a given number
- C Program to Check Whether a Number is Prime or not
- C++ Program to check Prime Number
- C Program to check Armstrong Number
- Lex program to check whether input number is odd or even