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

Last Updated : 20 Dec, 2022

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

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), as we will be using nested loops, outer loop for iterating from L to R and inner loop for traversing the elements of the array.
Auxiliary Space: O(1), as we will not be using any extra space.

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

 `// C++ program to count numbers in a range` `// that are divisible by all array elements` `#include ` `using` `namespace` `std;`   `// Function to find the lcm of array` `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 numbers` `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` `    ``return` `count;` `}`   `// Driver Code` `int` `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;` `}`

## C

 `// C program to count numbers in a range` `// that are divisible by all array elements` `#include `   `// function to find GCD of two numbers` `int` `gcd(``int` `x, ``int` `y)` `{` `    ``while` `(y != 0) {` `        ``int` `temp = y;` `        ``y = x % y;` `        ``x = temp;` `    ``}` `  ``return` `x;` `}`   `// Function to find the lcm of array` `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 numbers` `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` `    ``return` `count;` `}`   `// Driver Code` `int` `main()` `{` `    ``int` `arr[] = { 1, 4, 2 };` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr[0]);` `    ``int` `l = 1, r = 10;`   `    ``printf``(``"%d"``, countNumbers(arr, n, l, r));` `    ``return` `0;` `}`   `// This code is contributed by divyansh2212`

## Java

 `// Java program to count numbers in a range` `// that are divisible by all array elements` `class` `GFG {`   `    ``// Function to calculate gcd` `    ``static` `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 array` `    ``static` `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 numbers` `    ``static` `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 Code` `    ``public` `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`

## Python3

 `# Python program to count numbers in` `# a range that are divisible by all` `# array elements` `import` `math`   `# Function to find the lcm of array`     `def` `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 numbers`     `def` `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 Code` `arr ``=` `[``1``, ``4``, ``2``]` `n ``=` `len``(arr)` `l ``=` `1` `r ``=` `10`   `countNumbers(arr, n, l, r)`   `# This code is contributed` `# by Shivi_Aggarwal`

## C#

 `// C# program to count numbers in a range ` `// that are divisible by all array elements ` `using` `System;`   `class` `GFG ` `{ ` `    `  `// Function to calculate gcd ` `static` `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 array ` `static` `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 numbers ` `static` `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 Code ` `public` `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

 ` ``\$b``)` `        ``return` `__gcd(``\$a` `- ``\$b``, ``\$b``);` `        `  `    ``return` `__gcd(``\$a``, ``\$b` `- ``\$a``);` `}` `    `  `// Function to find the lcm of array` `function` `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 numbers` `function` `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` `?>`

## Javascript

 ``

Output:

`2`

Complexity Analysis:

• Time Complexity: O(N*log(max element of array)), as we are using a loop for traversing N times and gcd function to find the lcm in each traversal.
• Auxiliary Space: O(1), as we are not using any extra space.