Given two numbers X and Y. The task is to find the number of elements in the range [X,Y] both inclusive, that have the maximum number of divisors.
Examples:
Input: X = 2, Y = 9
Output: 2
6, 8 are numbers with the maximum number of divisors.Input: X = 1, Y = 10
Output: 3
6, 8, 10 are numbers with the maximum number of divisors.
Method 1:
- Traverse all the elements from X to Y one by one.
- Find the number of divisors of each element.
- Store the number of divisors in an array and update the maximum number of Divisors(maxDivisors).
- Traverse the array that contains divisors and counts the number of elements equal to maxDivisors.
- Return the count.
Below is the implementation of above method:
C++
// C++ implementation of above approach#include <bits/stdc++.h>using namespace std;// Function to count the divisorsint countDivisors(int n){ int count = 0; // Note that this loop runs till square root for (int i = 1; i <= sqrt(n); i++) { if (n % i == 0) { // If divisors are equal, print only one if (n / i == i) count++; else // Otherwise print both count += 2; } } return count;}// Function to count the number with// maximum divisorsint MaximumDivisors(int X, int Y){ int maxDivisors = INT_MIN, result = 0; // to store number of divisors int arr[Y - X + 1]; // Traverse from X to Y for (int i = X; i <= Y; i++) { // Count the number of divisors of i int Div = countDivisors(i); // Store the value of div in an array arr[i - X] = Div; // Update the value of maxDivisors maxDivisors = max(Div, maxDivisors); } // Traverse the array for (int i = 0; i < (Y - X + 1); i++) // Count the value equals to maxDivisors if (arr[i] == maxDivisors) result++; return result;}// Driver Codeint main(){ int X = 1, Y = 10; // function call cout << MaximumDivisors(X, Y) << endl; return 0;} |
C
// C implementation of above approach#include <stdio.h>#include <math.h>#include <limits.h>int max(int a,int b){ int max = a; if(max < b) max = b; return max;}// Function to count the divisorsint countDivisors(int n){ int count = 0; // Note that this loop runs till square root for (int i = 1; i <= sqrt(n); i++) { if (n % i == 0) { // If divisors are equal, print only one if (n / i == i) count++; else // Otherwise print both count += 2; } } return count;}// Function to count the number with// maximum divisorsint MaximumDivisors(int X, int Y){ int maxDivisors = INT_MIN, result = 0; // to store number of divisors int arr[Y - X + 1]; // Traverse from X to Y for (int i = X; i <= Y; i++) { // Count the number of divisors of i int Div = countDivisors(i); // Store the value of div in an array arr[i - X] = Div; // Update the value of maxDivisors maxDivisors = max(Div, maxDivisors); } // Traverse the array for (int i = 0; i < (Y - X + 1); i++) // Count the value equals to maxDivisors if (arr[i] == maxDivisors) result++; return result;}// Driver Codeint main(){ int X = 1, Y = 10; // function call printf("%d\n",MaximumDivisors(X, Y)); return 0;}// This code is contributed by kothavvsaakash. |
Java
// Java implementation of above approachclass GFG {// Function to count the divisorsstatic int countDivisors(int n){int count = 0;// Note that this loop // runs till square rootfor (int i = 1; i <= Math.sqrt(n); i++) { if (n % i == 0) { // If divisors are equal, // print only one if (n / i == i) count++; else // Otherwise print both count += 2; }}return count;}// Function to count the number // with maximum divisorsstatic int MaximumDivisors(int X, int Y){int maxDivisors = 0, result = 0;// to store number of divisorsint[] arr = new int[Y - X + 1];// Traverse from X to Yfor (int i = X; i <= Y; i++) { // Count the number of divisors of i int Div = countDivisors(i); // Store the value of div in an array arr[i - X] = Div; // Update the value of maxDivisors maxDivisors = Math.max(Div, maxDivisors);}// Traverse the array for (int i = 0; i < (Y - X + 1); i++) // Count the value equals // to maxDivisors if (arr[i] == maxDivisors) result++;return result;}// Driver Codepublic static void main(String[] args) { int X = 1, Y = 10; // function call System.out.println(MaximumDivisors(X, Y));}}// This code is contributed // by ChitraNayal |
Python3
# from math module import everythingfrom math import *# Python 3 implementation of above approach# Function to count the divisors def countDivisors(n) : count = 0 # Note that this loop runs till square root for i in range(1,int(sqrt(n)+1)) : if n % i == 0 : # If divisors are equal, print only one if n / i == i : count += 1 # Otherwise print both else : count += 2 return count# Function to count the number with # maximum divisors def MaximumDivisors(X,Y) : result = 0 maxDivisors = 0 # create list to store number of divisors arr = [] # initialize with 0 upto length Y-X+1 for i in range(Y - X + 1) : arr.append(0) # Traverse from X to Y for i in range(X,Y+1) : # Count the number of divisors of i Div = countDivisors(i) # Store the value of div in an array arr[i - X] = Div # Update the value of maxDivisors maxDivisors = max(Div,maxDivisors) # Traverse the array for i in range (Y - X + 1) : # Count the value equals to maxDivisors if arr[i] == maxDivisors : result += 1 return result# Driver codeif __name__ == "__main__" : X, Y = 1, 10 # function call print(MaximumDivisors(X,Y)) |
C#
// C# implementation of above approachusing System;class GFG{// Function to count the divisorsstatic int countDivisors(int n){int count = 0;// Note that this loop // runs till square rootfor (int i = 1; i <= Math.Sqrt(n); i++){ if (n % i == 0) { // If divisors are equal, // print only one if (n / i == i) count++; else // Otherwise print both count += 2; }}return count;}// Function to count the number // with maximum divisorsstatic int MaximumDivisors(int X, int Y){int maxDivisors = 0, result = 0;// to store number of divisorsint[] arr = new int[Y - X + 1];// Traverse from X to Yfor (int i = X; i <= Y; i++){ // Count the number of divisors of i int Div = countDivisors(i); // Store the value of div in an array arr[i - X] = Div; // Update the value of maxDivisors maxDivisors = Math.Max(Div, maxDivisors);}// Traverse the array for (int i = 0; i < (Y - X + 1); i++) // Count the value equals // to maxDivisors if (arr[i] == maxDivisors) result++;return result;}// Driver Codepublic static void Main(){ int X = 1, Y = 10; // function call Console.Write(MaximumDivisors(X, Y));}}// This code is contributed// by ChitraNayal |
PHP
<?php // PHP implementation of above approach// Function to count the divisorsfunction countDivisors($n){ $count = 0; // Note that this loop // runs till square root for ($i = 1; $i <= sqrt($n); $i++) { if ($n % $i == 0) { // If divisors are equal, // print only one if ($n / $i == $i) $count++; else // Otherwise print both $count += 2; } } return $count;}// Function to count the number // with maximum divisorsfunction MaximumDivisors($X, $Y){ $maxDivisors = PHP_INT_MIN; $result = 0; // to store number of divisors $arr = array_fill(0, ($Y - $X + 1), NULL); // Traverse from X to Y for ($i = $X; $i <= $Y; $i++) { // Count the number of divisors of i $Div = countDivisors($i); // Store the value of div in an array $arr[$i - $X] = $Div; // Update the value of maxDivisors $maxDivisors = max($Div, $maxDivisors); } // Traverse the array for ($i = 0; $i < ($Y - $X + 1); $i++) // Count the value equals to maxDivisors if ($arr[$i] == $maxDivisors) $result++; return $result;}// Driver Code$X = 1;$Y = 10;// function callecho MaximumDivisors($X, $Y)." ";// This code is contributed// by ChitraNayal?> |
Javascript
<script>// Javascript implementation of above approach// Function to count the divisorsfunction countDivisors(n){ let count = 0; // Note that this loop // runs till square root for(let i = 1; i <= Math.sqrt(n); i++) { if (n % i == 0) { // If divisors are equal, // print only one if (Math.floor(n / i) == i) count++; else // Otherwise print both count += 2; } } return count;}// Function to count the number // with maximum divisorsfunction MaximumDivisors(X, Y){ let maxDivisors = 0, result = 0; // To store number of divisors let arr = new Array(Y - X + 1); // Traverse from X to Y for(let i = X; i <= Y; i++) { // Count the number of divisors of i let Div = countDivisors(i); // Store the value of div in an array arr[i - X] = Div; // Update the value of maxDivisors maxDivisors = Math.max(Div, maxDivisors); } // Traverse the array for(let i = 0; i < (Y - X + 1); i++) // Count the value equals // to maxDivisors if (arr[i] == maxDivisors) result++; return result;}// Driver Codelet X = 1, Y = 10;// Function calldocument.write(MaximumDivisors(X, Y));// This code is contributed by rag2127</script> |
3
Time Complexity: O(sqrt(n))
Auxiliary Space: O(n)
Method 2:
- Create an array of size Y-X+1 to store number of divisors of X in arr[0], X+1 in arr[1]… up to Y.
- To get the number of divisors of all numbers from X to Y run two loops(nested).
- Run an outer loop from 1 to sqrt(Y).
- Run an inner loop from first_divisible to Y.
- First_divisible is the number which is the first number to be divisible by I(outer loop) and greater than or equals to X.
Here, first_divisible is calculated by using Find the number closest to n and divisible by m method. Then find divisors of the number.
Below is the implementation of above approach:
C++
// C++ implementation of above approach#include <bits/stdc++.h>using namespace std;// Function to count the elements// with maximum number of divisorsint MaximumDivisors(int X, int Y){ // to store number of divisors int arr[Y - X + 1]; // initialise with zero memset(arr, 0, sizeof(arr)); // to store the maximum number of divisors int mx = INT_MIN; // to store required answer int cnt = 0; for (int i = 1; i * i <= Y; i++) { int sq = i * i; int first_divisible; // Find the first divisible number if ((X / i) * i >= X) first_divisible = (X / i) * i; else first_divisible = (X / i + 1) * i; // Count number of divisors for (int j = first_divisible; j <= Y; j += i) { if (j < sq) continue; else if (j == sq) arr[j - X]++; else arr[j - X] += 2; } } // Find number of elements with // maximum number of divisors for (int i = X; i <= Y; i++) { if (arr[i - X] > mx) { cnt = 1; mx = arr[i - X]; } else if (arr[i - X] == mx) cnt++; } return cnt;}// Driver codeint main(){ int X = 1, Y = 10; cout << MaximumDivisors(X, Y) << endl; return 0;} |
C
// C implementation of above approach#include <stdio.h>#include <limits.h>#include <string.h>// Function to count the elements// with maximum number of divisorsint MaximumDivisors(int X, int Y){ // to store number of divisors int arr[Y - X + 1]; // initialise with zero memset(arr, 0, sizeof(arr)); // to store the maximum number of divisors int mx = INT_MIN; // to store required answer int cnt = 0; for (int i = 1; i * i <= Y; i++) { int sq = i * i; int first_divisible; // Find the first divisible number if ((X / i) * i >= X) first_divisible = (X / i) * i; else first_divisible = (X / i + 1) * i; // Count number of divisors for (int j = first_divisible; j <= Y; j += i) { if (j < sq) continue; else if (j == sq) arr[j - X]++; else arr[j - X] += 2; } } // Find number of elements with // maximum number of divisors for (int i = X; i <= Y; i++) { if (arr[i - X] > mx) { cnt = 1; mx = arr[i - X]; } else if (arr[i - X] == mx) cnt++; } return cnt;}// Driver codeint main(){ int X = 1, Y = 10; printf("%d\n",MaximumDivisors(X, Y)); return 0;}// This code is contributed by kothavvsaakash. |
Java
// Java implementation of above approachclass GFG {// Function to count the elements// with maximum number of divisorsstatic int MaximumDivisors(int X, int Y){ // to store number of divisorsint[] arr = new int[Y - X + 1];// initialise with zerofor(int i = 0; i < arr.length; i++) arr[i] = 0;// to store the maximum // number of divisorsint mx = 0;// to store required answerint cnt = 0;for (int i = 1; i * i <= Y; i++){ int sq = i * i; int first_divisible; // Find the first divisible number if ((X / i) * i >= X) first_divisible = (X / i) * i; else first_divisible = (X / i + 1) * i; // Count number of divisors for (int j = first_divisible; j <= Y; j += i) { if (j < sq) continue; else if (j == sq) arr[j - X]++; else arr[j - X] += 2; }}// Find number of elements with// maximum number of divisorsfor (int i = X; i <= Y; i++){ if (arr[i - X] > mx) { cnt = 1; mx = arr[i - X]; } else if (arr[i - X] == mx) cnt++;}return cnt;}// Driver codepublic static void main(String[] args) { int X = 1, Y = 10; System.out.println(MaximumDivisors(X, Y));}}// This code is contributed // by ChitraNayal |
Python3
# Python 3 implementation of above approach# Function to count the elements# with maximum number of divisorsdef MaximumDivisors(X, Y): # to store number of divisors # initialise with zero arr = [0] * (Y - X + 1) # to store the maximum # number of divisors mx = 0 # to store required answer cnt = 0 i = 1 while i * i <= Y : sq = i * i # Find the first divisible number if ((X // i) * i >= X) : first_divisible = (X // i) * i else: first_divisible = (X // i + 1) * i # Count number of divisors for j in range(first_divisible, Y + 1, i): if j < sq : continue elif j == sq : arr[j - X] += 1 else: arr[j - X] += 2 i += 1 # Find number of elements with # maximum number of divisors for i in range(X, Y + 1): if arr[i - X] > mx : cnt = 1 mx = arr[i - X] elif arr[i - X] == mx : cnt += 1 return cnt# Driver codeif __name__ == "__main__": X = 1 Y = 10 print(MaximumDivisors(X, Y))# This code is contributed # by ChitraNayal |
C#
// C# implementation of above approachusing System;class GFG {// Function to count the elements// with maximum number of divisorsstatic int MaximumDivisors(int X, int Y){ // to store number of divisorsint[] arr = new int[Y - X + 1];// initialise with zerofor(int i = 0; i < arr.Length; i++) arr[i] = 0;// to store the maximum // number of divisorsint mx = 0;// to store required answerint cnt = 0;for (int i = 1; i * i <= Y; i++) { int sq = i * i; int first_divisible; // Find the first divisible number if ((X / i) * i >= X) first_divisible = (X / i) * i; else first_divisible = (X / i + 1) * i; // Count number of divisors for (int j = first_divisible; j <= Y; j += i) { if (j < sq) continue; else if (j == sq) arr[j - X]++; else arr[j - X] += 2; }}// Find number of elements with// maximum number of divisorsfor (int i = X; i <= Y; i++){ if (arr[i - X] > mx) { cnt = 1; mx = arr[i - X]; } else if (arr[i - X] == mx) cnt++;}return cnt;}// Driver codepublic static void Main(){ int X = 1, Y = 10; Console.Write(MaximumDivisors(X, Y));}}// This code is contributed // by ChitraNayal |
PHP
<?php // PHP implementation of above approach// Function to count the elements// with maximum number of divisorsfunction MaximumDivisors($X, $Y){ // to store number of divisors // initialise with zero $arr = array_fill(0,($Y - $X + 1), NULL); // to store the maximum // number of divisors $mx = PHP_INT_MIN; // to store required answer $cnt = 0; for ($i = 1; $i * $i <= $Y; $i++) { $sq = $i * $i; // Find the first divisible number if (($X / $i) * $i >= $X) $first_divisible = ($X / $i) * $i; else $first_divisible = ($X / $i + 1) * $i; // Count number of divisors for ($j = $first_divisible; $j < $Y; $j += $i) { if ($j < $sq) continue; else if ($j == $sq) $arr[$j - $X]++; else $arr[$j - $X] += 2; } } // Find number of elements with // maximum number of divisors for ($i = $X; $i <= $Y; $i++) { if ($arr[$i - $X] > $mx) { $cnt = 1; $mx = $arr[$i - $X]; } else if ($arr[$i - $X] == $mx) $cnt++; } return $cnt;}// Driver code$X = 1;$Y = 10;echo MaximumDivisors($X, $Y)."\n";// This code is contributed // by ChitraNayal?> |
Javascript
<script>// Javascript implementation of above approach// Function to count the elements// with maximum number of divisorsfunction MaximumDivisors(X, Y){ // To store number of divisors let arr = new Array(Y - X + 1); // Initialise with zero for(let i = 0; i < arr.length; i++) arr[i] = 0; // To store the maximum // number of divisors let mx = 0; // To store required answer let cnt = 0; for(let i = 1; i * i <= Y; i++) { let sq = i * i; let first_divisible; // Find the first divisible number if (Math.floor(X / i) * i >= X) first_divisible = Math.floor(X / i) * i; else first_divisible = (Math.floor(X / i) + 1) * i; // Count number of divisors for(let j = first_divisible; j <= Y; j += i) { if (j < sq) continue; else if (j == sq) arr[j - X]++; else arr[j - X] += 2; } } // Find number of elements with // maximum number of divisors for(let i = X; i <= Y; i++) { if (arr[i - X] > mx) { cnt = 1; mx = arr[i - X]; } else if (arr[i - X] == mx) cnt++; } return cnt;}// Driver codelet X = 1, Y = 10;document.write(MaximumDivisors(X, Y));// This code is contributed by avanitrachhadiya2155</script> |
3
Time Complexity : O((Y – X + 1) * sqrt(Y))
Space Complexity : O(Y – X + 1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

… [Trackback]
[…] Read More on that Topic: geeksforgeeks.org/count-elements-in-the-given-range-which-have-maximum-number-of-divisors/ […]