Count numbers in a range that are divisible by all array elements - GeeksforGeeks

27 May, 2021
Given N numbers and two numbers L and R, the task is to print the count of numbers in the range [L, R] which are divisible by all the elements of the array. Examples:  
Input: a[] = {1, 4, 2], L = 1, R = 10 Output : 2 In range [1, 10], the numbers 4 and 8 are divisible by all the array elements. Input : a[] = {1, 3, 2], L = 7, R = 11 Output : 0 
 
A naive approach is to iterate from L to R and count the numbers which are divisible by all of the array elements. Time Complexity: O((R-L) * N)An efficient approach is to find the LCM of N numbers and then count the numbers that are divisible by LCM in the range  [L, R]. The numbers divisible by LCM till R are R/LCM. So using the exclusion principle, the count will be (R / LCM) – ((L – 1) / LCM). Below is the implementation of the above approach.  
C++
Java
Python3
C#
PHP
Javascript
// C++ program to count numbers in a range// that are divisible by all array elements#include <bits/stdc++.h>using namespace std; // Function to find the lcm of arrayint findLCM(int arr[], int n){    int lcm = arr[0];     // Iterate in the array    for (int i = 1; i < n; i++) {         // Find lcm        lcm = (lcm * arr[i]) / __gcd(arr[i], lcm);    }     return lcm;} // Function to return the count of numbersint countNumbers(int arr[], int n, int l, int r){     // Function call to find the    // LCM of N numbers    int lcm = findLCM(arr, n);     // Return the count of numbers    int count = (r / lcm) - ((l - 1) / lcm);} // Driver Codeint main(){    int arr[] = { 1, 4, 2 };    int n = sizeof(arr) / sizeof(arr[0]);    int l = 1, r = 10;     cout << countNumbers(arr, n, l, r);    return 0;}
// Java program to count numbers in a range// that are divisible by all array elementsclass GFG{     // Function to calculate gcdstatic int __gcd(int a, int b){           // Everything divides 0    if (a == 0 || b == 0)        return 0;       // base case    if (a == b)        return a;       // a is greater    if (a > b)        return __gcd(a - b, b);               return __gcd(a, b - a);}     // Function to find the lcm of arraystatic int findLCM(int arr[], int n){    int lcm = arr[0];     // Iterate in the array    for (int i = 1; i < n; i++)    {         // Find lcm        lcm = (lcm * arr[i]) / __gcd(arr[i], lcm);    }     return lcm;} // Function to return the count of numbersstatic int countNumbers(int arr[], int n,                        int l, int r){     // Function call to find the    // LCM of N numbers    int lcm = findLCM(arr, n);     // Return the count of numbers    int count = (r / lcm) - ((l - 1) / lcm);     return count;} // Driver Codepublic static void main(String args[]){    int arr[] = { 1, 4, 2 };    int n = arr.length;    int l = 1, r = 10;     System.out.println(countNumbers(arr, n, l, r));}} // This code is contributed by Mukul Singh
# Python program to count numbers in# a range that are divisible by all# array elementsimport math # Function to find the lcm of arraydef findLCM(arr, n):     lcm = arr[0]     # Iterate in the array    for i in range(1, n - 1):         # Find lcm        lcm = (lcm * arr[i]) / math.gcd(arr[i], lcm)     return lcm # Function to return the count of numbersdef countNumbers(arr, n, l, r):     # Function call to find the    # LCM of N numbers    lcm = int(findLCM(arr, n))         # Return the count of numbers    count = (r / lcm) - ((l - 1) / lcm)    print(int(count)) # Driver Codearr = [1, 4, 2]n = len(arr)l = 1r = 10 countNumbers(arr, n, l, r) # This code is contributed# by Shivi_Aggarwal
// C# program to count numbers in a range// that are divisible by all array elementsusing System; class GFG{     // Function to calculate gcdstatic int __gcd(int a, int b){             // Everything divides 0    if (a == 0 || b == 0)        return 0;         // base case    if (a == b)        return a;         // a is greater    if (a > b)        return __gcd(a - b, b);                 return __gcd(a, b - a);}     // Function to find the lcm of arraystatic int findLCM(int []arr, int n){    int lcm = arr[0];     // Iterate in the array    for (int i = 1; i < n; i++)    {         // Find lcm        lcm = (lcm * arr[i]) / __gcd(arr[i], lcm);    }     return lcm;} // Function to return the count of numbersstatic int countNumbers(int []arr, int n,                        int l, int r){     // Function call to find the    // LCM of N numbers    int lcm = findLCM(arr, n);     // Return the count of numbers    int count = (r / lcm) - ((l - 1) / lcm);     return count;} // Driver Codepublic static void Main(){    int []arr = { 1, 4, 2 };    int n = arr.Length;    int l = 1, r = 10;     Console.WriteLine(countNumbers(arr, n, l, r));}} // This code is contributed by Ryuga
<?php// PHP program to count numbers in a range// that are divisible by all array elements // Function to calculate gcdfunction __gcd($a, $b){         // Everything divides 0    if ($a == 0 || $b == 0)        return 0;     // base case    if ($a == $b)        return $a;     // a is greater    if ($a > $b)        return __gcd($a - $b, $b);             return __gcd($a, $b - $a);}     // Function to find the lcm of arrayfunction findLCM($arr, $n){    $lcm = $arr[0];     // Iterate in the array    for ($i = 1; $i < $n; $i++)    {         // Find lcm        $lcm = ($lcm * $arr[$i]) /                 __gcd($arr[$i], $lcm);    }     return $lcm;} // Function to return the count of numbersfunction countNumbers($arr, $n, $l, $r){     // Function call to find the    // LCM of N numbers    $lcm = findLCM($arr, $n);     // Return the count of numbers    $count = (int)($r / $lcm) -             (int)(($l - 1) / $lcm);     return $count;} // Driver Code$arr = array(1, 4, 2);$n = sizeof($arr);$l = 1; $r = 10;echo countNumbers($arr, $n, $l, $r); // This code is contributed// by Akanksha Rai?>
<script> // Javascript program to count numbers in a range// that are divisible by all array elements    // Function to calculate gcd    function __gcd(a , b) {         // Everything divides 0        if (a == 0 || b == 0)            return 0;         // base case        if (a == b)            return a;         // a is greater        if (a > b)            return __gcd(a - b, b);         return __gcd(a, b - a);    }     // Function to find the lcm of array    function findLCM(arr , n) {        var lcm = arr[0];         // Iterate in the array        for (i = 1; i < n; i++) {             // Find lcm            lcm = parseInt((lcm * arr[i]) / __gcd(arr[i], lcm));        }         return lcm;    }     // Function to return the count of numbers    function countNumbers(arr , n , l , r) {         // Function call to find the        // LCM of N numbers        var lcm = findLCM(arr, n);         // Return the count of numbers        var count = parseInt((r / lcm) - ((l - 1) / lcm));         return count;    }     // Driver Code             var arr = [ 1, 4, 2 ];        var n = arr.length;        var l = 1, r = 10;         document.write(countNumbers(arr, n, l, r)); // This code contributed by umadevi9616 </script>
2
 
Code_Mech
ankthon
Akanksha_Rai
Shivi_Aggarwal
umadevi9616
atarax
array-range-queries
GCD-LCM
Arrays
Competitive Programming
Arrays
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Stack Data Structure (Introduction and Program)
Top 50 Array Coding Problems for Interviews
Introduction to Arrays
Multidimensional Arrays in Java
Linear Search
Practice for cracking any coding interview
Arrow operator -> in C/C++ with Examples
Competitive Programming - A Complete Guide
Modulo 10^9+7 (1000000007)
Prefix Sum Array - Implementation and Applications in Competitive Programming