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
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 <bits/stdc++.h> 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
<?php // PHP 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 ) { $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 ?> |
2