Sunday, September 22, 2024
Google search engine
HomeData Modelling & AICount elements that are divisible by at-least one element in another array

Count elements that are divisible by at-least one element in another array

Given two arrays arr1[] and arr2[]. The task is to find the count of such elements in the first array whose at-least one factor is present in the second array.
Examples
 

Input : arr1[] = {10, 2, 13, 4, 15} ; arr2[] = {2, 4, 5, 6}
Output : 4
There is no factor of 13 which is present in the 
second array. Except 13, factors of the rest 4 
elements of the first array is present in the 
second array.

Input : arr1[] = {11, 13, 17, 15} ; arr2[] = {3, 7, 9, 5}
Output : 1

 

The idea is to insert all elements of the second array into a hash such that the lookup for factors can be done in constant time. Now, traverse the first array and for every element generate all of the factors starting from 1 and check if any of the factors is present in the hash or not.
Below is the implementation of the above approach: 
 

C++




// CPP program to find count of
// elements in first array whose
// atleast one factor is present
// in second array.
#include <bits/stdc++.h>
using namespace std;
 
// Util function to count the elements
// in first array whose atleast
// one factor is present in second array
int elementCount(int arr1[], int n1, int arr2[], int n2)
{
 
    // counter to count number of elements
    int count = 0;
 
    // Hash of second array elements
    unordered_set<int> hash;
    for (int i = 0; i < n2; i++)
        hash.insert(arr2[i]);
 
    // loop to traverse through array elements
    // and check for its factors
    for (int i = 0; i < n1; i++) {
 
        // generate factors of elements
        // of first array
        for (int j = 1; j * j <= arr1[i]; j++) {
 
            // Check if j is a factor
            if (arr1[i] % j == 0) {
 
                // check if the factor is present in
                // second array using the hash
                if ((hash.find(j) != hash.end()) ||
                        (hash.find(arr1[i] / j) != hash.end())) {
                    count++;
                    break;
                }
            }
        }
    }
 
    return count;
}
 
// Driver code
int main()
{
    int arr1[] = { 10, 2, 13, 4, 15 };
    int arr2[] = { 2, 4, 5, 6 };
 
    int n1 = sizeof(arr1) / sizeof(arr1[0]);
    int n2 = sizeof(arr2) / sizeof(arr2[0]);
 
    cout << elementCount(arr1, n1, arr2, n2);
 
    return 0;
}


Java




// Java program to find count of
// elements in first array whose
// atleast one factor is present
// in second array.
import java.util.*;
 
class GFG
{
 
    // Util function to count the elements
    // in first array whose atleast
    // one factor is present in second array
    static int elementCount(int arr1[], int n1,
                            int arr2[], int n2)
    {
 
        // counter to count number of elements
        int count = 0;
 
        // Hash of second array element
        HashSet<Integer> hash = new HashSet<>();
        for (int i = 0; i < n2; i++)
        {
            hash.add(arr2[i]);
        }
 
        // loop to traverse through array elements
        // and check for its factors
        for (int i = 0; i < n1; i++)
        {
 
            // generate factors of elements
            // of first array
            for (int j = 1; j * j <= arr1[i]; j++)
            {
 
                // Check if j is a factor
                if (arr1[i] % j == 0)
                {
 
                    // check if the factor is present in
                    // second array using the hash
                    if ((hash.contains(j) && j !=
                        (int) hash.toArray()[hash.size() - 1]) ||
                        (hash.contains(arr1[i] / j) && (arr1[i] / j) !=
                        (int) hash.toArray()[hash.size() - 1]))
                    {
                        count++;
                        break;
                    }
                }
            }
        }
 
        return count;
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int arr1[] = {10, 2, 13, 4, 15};
        int arr2[] = {2, 4, 5, 6};
 
        int n1 = arr1.length;
        int n2 = arr2.length;
        System.out.println(elementCount(arr1, n1, arr2, n2));
    }
}
 
/* This code contributed by PrinciRaj1992 */


Python3




# Python program to find count of
# elements in first array whose
# atleast one factor is present
# in second array.
  
# Importing sqrt() function
from math import sqrt
  
# Util function to count the
# elements in first array
# whose atleast one factor is
# present in second array
def elementCount(arr1, arr2):
    
  # counter to count
  # number of elements
  count = 0
    
  # Hash of second array elements
  hash = frozenset(arr2)
    
  # loop to traverse through array
  # elements and check for its factors
  for x in arr1:
        
    # generate factors of
    # elements of first array
    for j in range(1, int(sqrt(x)) + 1):
    
      # Check if j is a factor
      if x % j == 0:
  
        # check if the factor is present
        # in second array using the hash
        if (j in hash or
            x / j in hash):
          count+=1
          break
    
  return count
  
# Driver code
arr1 = [ 10, 2, 13, 4, 15 ]
arr2 = [ 2, 4, 5, 6 ]
  
print(elementCount(arr1, arr2))
  
# This code is contributed
# by vaibhav29498


C#




// C# program to find count of
// elements in first array whose
// atleast one factor is present
// in second array.
using System;
using System.Linq;
using System.Collections.Generic;
 
class GFG
{
 
    // Util function to count the elements
    // in first array whose atleast
    // one factor is present in second array
    static int elementCount(int []arr1, int n1,
                            int []arr2, int n2)
    {
 
        // counter to count number of elements
        int count = 0;
 
        // Hash of second array element
        HashSet<int> hash = new HashSet<int>();
        for (int i = 0; i < n2; i++)
        {
            hash.Add(arr2[i]);
        }
 
        // loop to traverse through array elements
        // and check for its factors
        for (int i = 0; i < n1; i++)
        {
 
            // generate factors of elements
            // of first array
            for (int j = 1; j * j <= arr1[i]; j++)
            {
 
                // Check if j is a factor
                if (arr1[i] % j == 0)
                {
 
                    // check if the factor is present in
                    // second array using the hash
                    if ((hash.Contains(j) && j !=
                        (int) hash.ToArray()[hash.Count- 1]) ||
                        (hash.Contains(arr1[i] / j) && (arr1[i] / j) !=
                        (int) hash.ToArray()[hash.Count - 1]))
                    {
                        count++;
                        break;
                    }
                }
            }
        }
 
        return count;
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        int []arr1 = {10, 2, 13, 4, 15};
        int []arr2 = {2, 4, 5, 6};
 
        int n1 = arr1.Length;
        int n2 = arr2.Length;
        Console.WriteLine(elementCount(arr1, n1, arr2, n2));
    }
}
 
// This code contributed by Rajput-Ji


PHP




<?php
// PHP program to find count of
// elements in first array whose
// atleast one factor is present
// in second array.
 
// Util function to count the
// elements in first array
// whose atleast one factor is
// present in second array
function elementCount($arr1, $arr2)
{
    // counter to count
    // number of elements
    $count = 0;
         
    // Hash of second array elements
    $hash = array_unique($arr2);
         
    // loop to traverse through array
    // elements and check for its factors
    foreach($arr1 as &$x)
     
        // generate factors of
        // elements of first array
        for ($j = 1; $j < (int)(sqrt($x)) + 1; $j++)
         
        // Check if j is a factor
        if ($x % $j == 0)
        {
             
            // check if the factor is present
            // in second array using the hash
            if (in_array($j, $hash) ||
                in_array((int)($x / $j), $hash))
            {
                $count++;
                break;
            }
        }
         
    return $count;
}
 
// Driver code
$arr1 = array( 10, 2, 13, 4, 15 );
$arr2 = array( 2, 4, 5, 6 );
 
print(elementCount($arr1, $arr2));
 
// This code is contributed mits
?>


Javascript




<script>
// javascript program to find count of
// elements in first array whose
// atleast one factor is present
// in second array.
 
    // Util function to count the elements
    // in first array whose atleast
    // one factor is present in second array
    function elementCount(arr1 , n1 , arr2 , n2) {
 
        // counter to count number of elements
        var count = 0;
 
        // Hash of second array element
        var hash = new Set();
        for (i = 0; i < n2; i++) {
            hash.add(arr2[i]);
        }
 
        // loop to traverse through array elements
        // and check for its factors
        for (i = 0; i < n1; i++) {
 
            // generate factors of elements
            // of first array
            for (j = 1; j * j <= arr1[i]; j++) {
 
                // Check if j is a factor
                if (arr1[i] % j == 0) {
 
                    // check if the factor is present in
                    // second array using the hash
                    if ((hash.has(j) && j != parseInt( hash[hash.length - 1])
                            || (hash.has(arr1[i] / j) && (arr1[i] / j) != parseInt( hash[hash.length - 1])))) {
                        count++;
                        break;
                    }
                }
            }
        }
 
        return count;
    }
 
    // Driver code
     
        var arr1 = [ 10, 2, 13, 4, 15 ];
        var arr2 = [ 2, 4, 5, 6 ];
 
        var n1 = arr1.length;
        var n2 = arr2.length;
        document.write(elementCount(arr1, n1, arr2, n2));
 
// This code contributed by umadevi9616
</script>


Output
 

4

 

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

RELATED ARTICLES

Most Popular

Recent Comments