Open In App

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

Last Updated : 20 Dec, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

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 <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);
 
    // 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 <stdio.h>
 
// 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




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


Javascript




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


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.


Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads