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

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 numbers 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 all array elements.

Input : a[] = {1, 3, 2], L = 7, R = 11
Output : 0

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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 range L and R. The numbers divisible by LCM till R are R/LCM. So using 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); ` `} ` ` `  `// 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; ` `} `

## 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 ` `?> `

Output:

```2
```

My Personal Notes arrow_drop_up

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.