Number of elements with odd factors in given range - GeeksforGeeks

31 Mar, 2021
Given a range [n,m], find the number of elements that have odd number of factors in the given range (n and m inclusive). 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 numberAn 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++
Java
Python3
C#
PHP
Javascript
// 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 codeint main(){    int n = 5, m = 100;    cout << "Count is " << countOddSquares(n, m);    return 0;}
// Java program to count number of odd squares// in given range [n, m] import java.io.*;import java.util.*;import java.lang.*; class GFG{    public static int countOddSquares(int n, int m)    {        return (int)Math.pow((double)m,0.5) - (int)Math.pow((double)n-1,0.5);    }    // Driver code for above functions    public static void main (String[] args)    {        int n = 5, m = 100;        System.out.print("Count is " + countOddSquares(n, m));    }}// Mohit Gupta_OMG <(o_0)>
# Python program to count number of odd squares# in given range [n, m] def countOddSquares(n, m):    return int(m**0.5) - int((n-1)**0.5) # Driver coden = 5m = 100print("Count is", countOddSquares(n, m)) # Mohit Gupta_OMG <0_o>
// C# program to count number of odd// squares in given range [n, m]using System; class GFG {         // Function to count odd squares    public static int countOddSquares(int n, int m)    {        return (int)Math.Pow((double)m, 0.5) -               (int)Math.Pow((double)n - 1, 0.5);    }         // Driver code    public static void Main ()    {        int n = 5, m = 100;        Console.Write("Count is " + countOddSquares(n, m));    }} // This code is contributed by Nitin Mittal.
<?php// PHP program to count// number of odd squares// in given range [n, m] function countOddSquares($n, $m){return pow($m, 0.5) -       pow($n - 1, 0.5);} // Driver code$n = 5; $m = 100;echo "Count is " ,      countOddSquares($n, $m); // This code is contributed// by nitin mittal.?>
<script> // JavaScript program to count number of odd squares// in given range [n, m] function countOddSquares(n, m)    {        return Math.pow(m,0.5) - Math.pow(n-1,0.5);    } // Driver Code         let n = 5, m = 100;        document.write("Count is " + countOddSquares(n, m));                         </script>
Output : 
Count is 8
Time Complexity : O(1)This article is contributed by Divyanshu Bansal. 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.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
nitin mittal
code_hunt
Wipro
Mathematical
Wipro
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Merge two sorted arrays
Modulo Operator (%) in C/C++ with Examples
Prime Numbers
Program for Decimal to Binary Conversion
Modulo 10^9+7 (1000000007)
Program to find sum of elements in a given array
The Knight's tour problem | Backtracking-1
Program for factorial of a number
Minimum number of jumps to reach end
Operators in C / C++