Skip to content
  • Home
  • Contact Us
  • About Us
  • Privacy Policy
  • DMCA
  • Linkedin
  • Pinterest
  • Facebook
thecscience

TheCScience

TheCScience is a blog that publishes daily tutorials and guides on engineering subjects and everything that related to computer science and technology

  • Home
  • Human values
  • Microprocessor
  • Digital communication
  • Linux
  • outsystems guide
  • Toggle search form
HackerRank Between Two Sets Problem Solution

HackerRank Between Two Sets Problem Solution

Posted on April 11, 2023April 11, 2023 By Yashwant Parihar No Comments on HackerRank Between Two Sets Problem Solution

In this post, We are going to solve HackerRank Between Two Sets Problem.

There will be two arrays of integers. Determine all integers that satisfy the following two conditions:

  1. The elements of the first array are all factors of the integer being considered
  2. The integer being considered is a factor of all elements of the second array

These numbers are referred to as being between the two arrays. Determine how many such numbers exist.

Example

a = [2, 6]

b = [24, 36]

There are two numbers between the arrays: 6 and 12.

Function Description

Complete the getTotalX function in the editor below. It should return the number of integers that are between the sets.

get total x has the following parameter(s):

  • int a[n]: an array of integers
  • int b[m]: an array of integers

Returns

  • int: the number of integers that are between the sets

Input Format

The first line contains two space-separated integers, n, and m, the number of elements in arrays a and b.
The second line contains n distinct space-separated integers a[I]  where 0 < I < n.
The third line contains m distinct space-separated integers b[j] where 0 < j < m.

Sample Input

2 3
2 4
16 32 96

Sample Output

3

Explanation

2 and 4 divided evenly into 4, 8, 12, and 16.
4, 8, and 16 divided evenly into 16, 32, and 96.

4, 8, and 16 are the only three numbers for which each element of a is a factor and each is a factor of all elements of b.

HackerRank Between Two Sets Problem Solution
HackerRank Between Two Sets Problem Solution

Table of Contents

  • Between Two Sets C Solution
  • Between Two Sets C++ Solution
  • Between Two Sets C Sharp Solution
  • Between Two Sets Java Solution
  • Between Two Sets JavaScript Solution
  • Between Two Sets Python Solution

Between Two Sets C Solution

#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <stdbool.h>

int main(){
    int n; 
    int m; 
    scanf("%d %d",&n,&m);
    int *a = malloc(sizeof(int) * n);
    for(int a_i = 0; a_i < n; a_i++){
       scanf("%d",&a[a_i]);
    }
    int *b = malloc(sizeof(int) * m);
    for(int b_i = 0; b_i < m; b_i++){
       scanf("%d",&b[b_i]);
    }
    
    // Find OBEB
    int obeb = 1;
    int factor = 2;
    int maxfactor=1;
    int i,j;
    
    for(i=0;i<n;i++)
        if(*(a+i)>maxfactor)
            maxfactor = *(a+i);
        
    while(factor<=maxfactor)
    {
        for(i=0;i<n;i++)
        {
            if(*(a+i)%factor == 0)
            {
                obeb *= factor;
                *(a+i) /= factor;
                for(j=i+1;j<n;j++)
                {
                    if(*(a+j)%factor == 0)
                    {
                        *(a+j) /= factor;
                    }
                }
                maxfactor=1;
                for(j=0;j<n;j++)
                    if(*(a+j)>maxfactor)
                        maxfactor = *(a+j);
                factor--;
                break;
            }
        }
        factor++;
        //printf("%d-%d\n",factor,maxfactor);
    }
    //printf("%d\n",obeb);
    // Find OKEK
    int okek = 1;
    
    factor = 2;
    maxfactor=1;
    
    for(i=0;i<m;i++)
        if(*(b+i)>maxfactor)
            maxfactor = *(b+i);
        
    
    while(factor<=maxfactor)
    {
        for(i=0;i<m;i++)
        {
            if(*(b+i)%factor != 0)
            {
                break;
            }
        }
        if(i==m)
        {
            okek *= factor;
            for(j=0;j<m;j++)
            {
                *(b+j) /= factor;
            }
            
            maxfactor=1;
            for(j=0;j<m;j++)
                if(*(b+j)>maxfactor)
                    maxfactor = *(b+j);
            factor--;
        }
            
        factor++;
    }
    
    if(obeb==okek)
        printf("1");
    else if(okek%obeb!=0)
        printf("0");
    else
    {
        int k=2;
        int count=2;
        //printf("%d-%d\n",obeb,okek);
        while(k*obeb<okek)
        {
            if(okek%(obeb*k)==0)
                count++;
            k++;
        }
        printf("%d",count);
    }
    return 0;
}

Between Two Sets C++ Solution

#include <bits/stdc++.h>

using namespace std;

const int N = 110;

int a[N], b[N];

int main() {
  int n, m;
  scanf("%d %d", &n, &m);
  for (int i = 0; i < n; i++) {
    scanf("%d", a + i);
  }
  for (int i = 0; i < m; i++) {
    scanf("%d", b + i);
  }
  int ans = 0;
  for (int i = 1; i <= 1000; i++) {
    bool ok = true;
    for (int j = 0; j < n; j++) {
      if (i % a[j] != 0) {
        ok = false;
      }
    }
    for (int j = 0; j < m; j++) {
      if (b[j] % i != 0) {
        ok = false;
      }
    }
    if (ok) {
      ans++;
    }
  }
  printf("%d\n", ans);
  return 0;
}

Between Two Sets C Sharp Solution

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
class Solution {

    static void Main(String[] args) {
        string[] tokens_n = Console.ReadLine().Split(' ');
        Convert.ToInt32(tokens_n[0]);
        Convert.ToInt32(tokens_n[1]);
        string[] a_temp = Console.ReadLine().Split(' ');
        int[] a = Array.ConvertAll(a_temp,Int32.Parse);
        string[] b_temp = Console.ReadLine().Split(' ');
        int[] b = Array.ConvertAll(b_temp,Int32.Parse);
        
        var bFactors = GetAllFactors(b);
        Console.WriteLine(CountFactorsOf(bFactors, a));
    }
    
    static int CountFactorsOf(IEnumerable<int> numbers, IEnumerable<int> testFactors){
        var factors = new HashSet<int>();
        foreach(int number in numbers){
            if(testFactors.All(f=>number%f==0)){
                //Console.WriteLine("{0} is common",number);
                factors.Add(number);
            }
        }
        return factors.Count();
    }
    
    static IEnumerable<int> GetAllFactors(IEnumerable<int> numbers){
        var factors = new HashSet<int>();
        for(int i=1;i<=numbers.Max();i++){
            if(numbers.All(x=>x%i==0)){
                //Console.WriteLine("{0} is a common factor",i);
                factors.Add(i);
            }
        }
        return factors;
    }
}

Between Two Sets Java Solution

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
import java.util.regex.*;
import java.util.stream.*;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;

class Result {

    /*
     * Complete the 'getTotalX' function below.
     *
     * The function is expected to return an INTEGER.
     * The function accepts following parameters:
     *  1. INTEGER_ARRAY a
     *  2. INTEGER_ARRAY b
     */
     
    private static int getHCF(int x, int y) {
        if (x == 0 || y == 0) {
            return x+y;
        }
        return getHCF(y, x%y);
    }
    
    private static int getLCM(int x, int y) {
        return (x*y)/getHCF(x, y);
    }

    public static int getTotalX(List<Integer> a, List<Integer> b) {
        // Write your code here
        
        // find LCM of list a
        // LCM(x, y) = (x * y) / HCF(x, y)
        int lcmA = a.get(0);
        for (int i = 0; i < a.size() - 1; i++) {
            lcmA = getLCM(lcmA, a.get(i+1));
        }
        
        // find HCF of list b
        int hcfB = b.get(0);
        for (int i = 0; i < b.size() - 1; i++) {
            hcfB = getHCF(hcfB, b.get(i+1));
        }
        
        // compute all multiples of LCM <= HCF vaue
        int count = 0;
        int id = 0;
        int multiple = lcmA;
        // System.out.println("HCF: " + hcfB);
        // System.out.println("LCM: " + lcmA);
        while (multiple <= hcfB) {
            id++;
            multiple = lcmA * id;
            // System.out.println("Multiple: " + multiple);
            if (hcfB % multiple == 0) {
                // System.out.println("Increase count");
                count++;
            }
        }
        return count;
    }
}

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));

        String[] firstMultipleInput = bufferedReader.readLine().replaceAll("\\s+$", "").split(" ");

        int n = Integer.parseInt(firstMultipleInput[0]);

        int m = Integer.parseInt(firstMultipleInput[1]);

        List<Integer> arr = Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
            .map(Integer::parseInt)
            .collect(toList());

        List<Integer> brr = Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
            .map(Integer::parseInt)
            .collect(toList());

        int total = Result.getTotalX(arr, brr);

        bufferedWriter.write(String.valueOf(total));
        bufferedWriter.newLine();

        bufferedReader.close();
        bufferedWriter.close();
    }
}

Between Two Sets JavaScript Solution

process.stdin.resume();
process.stdin.setEncoding('ascii');

var input_stdin = "";
var input_stdin_array = "";
var input_currentline = 0;

process.stdin.on('data', function (data) {
    input_stdin += data;
});

process.stdin.on('end', function () {
    input_stdin_array = input_stdin.split("\n");
    main();    
});

function readLine() {
    return input_stdin_array[input_currentline++];
}

/////////////// ignore above this line ////////////////////

function main() {
    var n_temp = readLine().split(' ');
    var n = parseInt(n_temp[0]);
    var m = parseInt(n_temp[1]);
    a = readLine().split(' ');
    a = a.map(Number).sort();
    b = readLine().split(' ');
    b = b.map(Number).sort();
    
    var maxA = a.slice(-1)[0];
    var minB = b[0];
    var between = 0;
    for(var num = maxA; num <= minB; num = num + maxA) {
        var isFactored = a.every(function(aNum){
            return num%aNum===0;
        });
        
        var isFactor = b.every(function(bNum){
            return bNum%num===0;
        });
        if(isFactored && isFactor){
            between++;
        }
    }
    
    console.log(between);
    

}

Between Two Sets Python Solution

from itertools import *
from operator import *
from functools import *
n, m = map(int, input().split())
*A, = map(int, input().split())
*B, = map(int, input().split())
print(sum([not any(map(partial(reduce, mod), list(product([x], A)) + list(product(B, [x])))) for x in range(1, 200)]))

Other Solutions

  • HackerRank Breaking the Records Solution
  • HackerRank Subarray Division Problem Solution
c, C#, C++, HackerRank Solutions, java, javascript, python Tags:C, cpp, CSharp, Hackerrank Solutions, java, javascript, python

Post navigation

Previous Post: HackerRank Number Line Jumps Problem Solution
Next Post: HackerRank Breaking the Records Solution

Related Posts

HackerRank Anagram Problem Solution HackerRank Anagram Problem Solution c
HackerRank Synchronous Shopping Problem Solution HackerRank Synchronous Shopping Solution c
HackerRank Sherlock and Array Problem Solution HackerRank Sherlock and Array Problem Solution c
HackerRank Two Characters Problem Solution HackerRank Two Characters Problem Solution c
HackerRank Jeanie's Route Problem Solution HackerRank Jeanie’s Route Problem Solution c
HackerRank Roads in HackerLand Problem Solution HackerRank Roads in HackerLand Solution c

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Pick Your Subject
Human Values

Copyright © 2023 TheCScience.

Powered by PressBook Grid Blogs theme