Open In App

Elements of an array that are not divisible by any element of another array

Improve
Improve
Like Article
Like
Save
Share
Report

Given two arrays A[] and B[], write an efficient code to determine if every element of B[] is divisible by at least 1 element of A[]. Display those elements of B[], which are not divisible by any of the elements in A[]. 

Examples : 

Input : A[] = {100, 200, 400, 100, 600}
        B[] = {45, 90, 48, 1000, 3000}
Output : 45, 90, 48 
The output elements are those that are 
not divisible by any element of A[].

Method I (Naive Implementation):

  • Iterate through every single element of B[].
  • Check if it is divisible by at least 1 element of A[] or not. If not divisible by any, then print it.

Implementation:

C++




// C++ code for naive implementation
#include<iostream>
using namespace std;
 
// Function for checking the condition
// with 2 loops
void printNonDivisible(int A[], int B[],
                          int n, int m)
{
    for (int i = 0; i < m; i++)
    {
        int j = 0;
        for (j = 0; j < n; j++)
            if( B[i] % A[j] == 0 )
                break;
 
        // If none of the elements in A[]
        // divided B[i]
        if (j == n)
            cout << B[i] << endl;
    }
}
 
// Driver code
int main()
{
    int A[] = {100, 200, 400, 100};
    int n = sizeof(A)/sizeof(A[0]);
    int B[] = {190, 200, 87, 600, 800};
    int m = sizeof(B)/sizeof(B[0]);
    printNonDivisible(A, B, n, m);
    return 0;
}


Java




// Java code for naive implementation
import java.io.*;
 
public class GFG {
     
// Function for checking the condition
// with 2 loops
static void printNonDivisible(int []A, int []B,
                              int n, int m)
{
     
    for (int i = 0; i < m; i++)
    {
        int j = 0;
        for (j = 0; j < n; j++)
            if( B[i] % A[j] == 0 )
                break;
 
        // If none of the elements
        // in A[] divided B[i]
        if (j == n)
            System.out.println(B[i]);
    }
}
 
    // Driver code
    static public void main (String[] args)
    {
        int []A = {100, 200, 400, 100};
        int n = A.length;
         
        int []B = {190, 200, 87, 600, 800};
        int m = B.length;
         
        printNonDivisible(A, B, n, m);
    }
}
 
// This code is contributed by vt_m .


Python3




# Python3 code for naive implementation
import math as mt
 
# Function for checking the condition
# with 2 loops
def printNonDivisible(A, B, n, m):
 
    for i in range(m):
        j = 0
        for j in range(n):
            if(B[i] % A[j] == 0):
                break
 
        # If none of the elements in A[]
        # divided B[i]
        if (j == n - 1):
            print(B[i])
 
# Driver code
A = [100, 200, 400, 100]
n = len(A)
B = [190, 200, 87, 600, 800]
m = len(B)
printNonDivisible(A, B, n, m)
 
# This code is contributed by#
# mohit kumar 29


C#




// C# code for naive implementation
using System;
 
public class GFG {
     
// Function for checking the
// condition with 2 loops
static void printNonDivisible(int []A, int []B,
                              int n, int m)
{
     
    for (int i = 0; i < m; i++)
    {
        int j = 0;
        for (j = 0; j < n; j++)
            if( B[i] % A[j] == 0 )
                break;
 
        // If none of the elements
        // in A[] divided B[i]
        if (j == n)
            Console.WriteLine(B[i]);
    }
}
 
    // Driver code
    static public void Main ()
    {
        int []A = {100, 200, 400, 100};
        int n = A.Length;
        int []B = {190, 200, 87, 600, 800};
        int m = B.Length;
        printNonDivisible(A, B, n, m);
    }
}
 
// This code is contributed by vt_m .


PHP




<?php
// PHP code for naive implementation
 
// Function for checking
// the condition with 2 loops
function printNonDivisible($A, $B,
                           $n, $m)
{
    for ($i = 0; $i < $m; $i++)
    {
        $j = 0;
        for ($j = 0; $j < $n; $j++)
            if( $B[$i] % $A[$j] == 0 )
                break;
 
        // If none of the elements
        // in A[] divided B[i]
        if ($j == $n)
            echo $B[$i], "\n";
    }
}
 
// Driver code
$A= array (100, 200, 400, 100);
$n = sizeof($A);
$B = array (190, 200, 87, 600, 800);
$m = sizeof($B);
 
printNonDivisible($A, $B, $n, $m);
 
// This code is contributed by ajit
?>


Javascript




<script>
 
    // Javascript code for naive implementation
     
    // Function for checking the
    // condition with 2 loops
    function printNonDivisible(A, B, n, m)
    {
 
        for (let i = 0; i < m; i++)
        {
            let j = 0;
            for (j = 0; j < n; j++)
                if( B[i] % A[j] == 0 )
                    break;
 
            // If none of the elements
            // in A[] divided B[i]
            if (j == n)
                document.write(B[i] + "</br>");
        }
    }
     
    let A = [100, 200, 400, 100];
    let n = A.length;
    let B = [190, 200, 87, 600, 800];
    let m = B.length;
    printNonDivisible(A, B, n, m);
 
</script>


Output

190
87

Time Complexity :- O(n*m) 
Auxiliary Space :- O(1) 

Method 2 (Efficient when elements in are small) 

  • Maintain an array mark[] to mark the multiples of the numbers in A[].
  • Mark all the multiples of all the elements in A[], till a max of B[].
  • Check if mark[B[i]] value for every element n in B[] is not 0 and print if not marked.

Implementation:

C++




// CPP code for improved implementation
#include<bits/stdc++.h>
using namespace std;
 
// Function for printing all elements of B[]
// that are not divisible by any element of A[]
void printNonDivisible(int A[], int B[], int n,
                                         int m)
{
    // Find maximum element in B[]
    int maxB = 0;
    for (int i = 0; i < m; i++)
        if (B[i] > maxB)
            maxB = B[i];
 
    // Initialize all multiples as marked
    int mark[maxB];
    memset(mark, 0, sizeof(mark));
 
    // Marking the multiples of all the
    // elements of the array.
    for (int i = 0; i < n; i++)
        for (int x = A[i]; x <= maxB; x += A[i])
            mark[x]++;
 
    // Print not marked elements
    for (int i = 0; i < m; i++)
        if (! mark[B[i]])
            cout << B[i] << endl;
}
 
// Driver function
int main()
{
    int A[] = {100, 200, 400, 100};
    int n = sizeof(A)/sizeof(A[0]);
    int B[] = {190, 200, 87, 600, 800};
    int m = sizeof(B)/sizeof(B[0]);
    printNonDivisible(A, B, n, m);
    return 0;
}


Java




// Java code for improved implementation
import java.io.*;
 
class GFG
{
     
// Function for printing all elements of B[]
// that are not divisible by any element of A[]
static void printNonDivisible(int []A, int []B,
                                    int n,int m)
{
    // Find maximum element in B[]
    int maxB = 0;
    for (int i = 0; i < m; i++)
        if (B[i] > maxB)
            maxB = B[i];
 
    // Initialize all multiples as marked
 
    int [] mark = new int[maxB + 1];
    for(int i = 0; i < maxB; i++)
        mark[i]=0;
 
    // Marking the multiples of all the
    // elements of the array.
    for (int i = 0; i < n; i++)
        for (int x = A[i]; x <= maxB; x += A[i])
            mark[x]++;
 
    // Print not marked elements
    for (int i = 0; i < m; i++)
        if (mark[B[i]] == 0)
            System.out.println(B[i]);
}
 
// Driver code
static public void main(String[] args)
{
    int []A= {100, 200, 400, 100};
    int n = A.length;
    int []B= {190, 200, 87, 600, 800};
    int m = B.length;
    printNonDivisible(A, B, n, m);
}
}
 
// This code is contributed by Mohit Kumar.


Python3




# Python 3 code for improved implementation
 
# Function for printing all elements of B[]
# that are not divisible by any element of A[]
def printNonDivisible(A, B, n, m):
     
    # Find maximum element in B[]
    maxB = 0
    for i in range(0, m, 1):
        if (B[i] > maxB):
            maxB = B[i]
 
    # Initialize all multiples as marked
    mark = [0 for i in range(maxB)]
 
    # Marking the multiples of all
    # the elements of the array.
    for i in range(0, n, 1):
        for x in range(A[i], maxB, A[i]):
            mark[x] += 1
 
    # Print not marked elements
    for i in range(0, m - 1, 1):
        if (mark[B[i]] == 0):
            print(B[i])
 
# Driver Code
if __name__ == '__main__':
    A = [100, 200, 400, 100]
    n = len(A)
    B = [190, 200, 87, 600, 800]
    m = len(B)
    printNonDivisible(A, B, n, m)
 
# This code is contributed by
# Shashank_Sharma


C#




// C# code for improved implementation
using System;
 
class GFG
{
     
// Function for printing all elements of []B
// that are not divisible by any element of []A
static void printNonDivisible(int []A, int []B,
                                    int n, int m)
{
    // Find maximum element in []B
    int maxB = 0;
    for (int i = 0; i < m; i++)
        if (B[i] > maxB)
            maxB = B[i];
 
    // Initialize all multiples as marked
    int [] mark = new int[maxB + 1];
    for(int i = 0; i < maxB; i++)
        mark[i] = 0;
 
    // Marking the multiples of all the
    // elements of the array.
    for (int i = 0; i < n; i++)
        for (int x = A[i]; x <= maxB; x += A[i])
            mark[x]++;
 
    // Print not marked elements
    for (int i = 0; i < m; i++)
        if (mark[B[i]] == 0)
            Console.WriteLine(B[i]);
}
 
// Driver code
static public void Main(String[] args)
{
    int []A= {100, 200, 400, 100};
    int n = A.Length;
    int []B= {190, 200, 87, 600, 800};
    int m = B.Length;
    printNonDivisible(A, B, n, m);
}
}
 
// This code is contributed by Rajput-Ji


PHP




<?php
// PHP code for improved implementation
 
// Function for printing all elements of B[]
// that are not divisible by any element of A[]
function printNonDivisible($A, $B, $n, $m)
{
     
    // Find maximum element in B[]
    $maxB = 0;
    for ($i = 0; $i < $m; $i++)
    {
        if ($B[$i] > $maxB)
            $maxB = $B[$i];
    }
     
    // Initialize all multiples as marked
    $mark = array();
    for ($i = 0; $i < $maxB; $i++)
    {
        $mark[] = "0";
    }
 
    // Marking the multiples of all
    // the elements of the array.
    for ($i = 0; $i < $n; $i++)
    {
        for ($x = $A[$i]; $x < $maxB;
                          $x += $A[$i])
        {
            $mark[$x] += 1;
        }
    }
     
    // Print not marked elements
    for ($i = 0; $i < $m - 1; $i++)
    {
        if ($mark[$B[$i]] == 0)
            echo "$B[$i]\n";
    }
}
 
// Driver Code
$A = array(100, 200, 400, 100);
$n = count($A);
$B = array(190, 200, 87, 600, 800);
$m = count($B);
printNonDivisible($A, $B, $n, $m);
 
// This code is contributed by
// Srathore
?>


Javascript




<script>
 
    // Javascript code for improved implementation
     
    // Function for printing all elements of []B
    // that are not divisible by any element of []A
    function printNonDivisible(A, B, n, m)
    {
        // Find maximum element in []B
        let maxB = 0;
        for (let i = 0; i < m; i++)
            if (B[i] > maxB)
                maxB = B[i];
 
        // Initialize all multiples as marked
        let mark = new Array(maxB + 1);
        for(let i = 0; i < maxB; i++)
            mark[i] = 0;
 
        // Marking the multiples of all the
        // elements of the array.
        for (let i = 0; i < n; i++)
            for (let x = A[i]; x <= maxB; x += A[i])
                mark[x]++;
 
        // Print not marked elements
        for (let i = 0; i < m; i++)
            if (mark[B[i]] == 0)
                document.write(B[i] + "</br>");
    }
     
    let A= [100, 200, 400, 100];
    let n = A.length;
    let B= [190, 200, 87, 600, 800];
    let m = B.length;
    printNonDivisible(A, B, n, m);
     
</script>


Output

190
87

Time Complexity :- O(m + n*(max(B[]/min(A[]))) 
Auxiliary Space :- O(n) + O(m) + O(max(B[])) 

 



Last Updated : 13 Jul, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads