Skip to content
Related Articles
Max count of unique ratio/fraction pairs in given arrays
• Difficulty Level : Hard
• Last Updated : 10 Jun, 2021

Given two arrays num[] and den[] which denotes the numerator and denominator respectively, the task is to find the count of the unique fractions.
Examples:

Input: num[] = {1, 2, 3, 4, 5}, den[] = {2, 4, 6, 1, 11}
Output:
Explanation:
Simplest forms of the fractions
Frac => Frac => Frac => Frac => Frac => Count of Unique Fractions => 3
Input: num[] = {10, 20, 30, 50}, den[] = {10, 10, 10, 10}
Output:
Explanation:
Simplest forms of the fractions
Frac => Frac => Frac => Frac => Count of Unique Fractions => 4

Approach: The idea is to use hash-map to find the unique fractions. To store the fractions such that the duplicates are not there, we convert each fraction to its lowest form
Below is the implementation of the above approach:

## C++

 // C++ implementation to find// fractions in its lowest form #include  using namespace std; // Recursive function to// find gcd of a and bint gcd(int a, int b){    if (b == 0)        return a;    return gcd(b, a % b);} // Function to count the unique// fractios in the given arrayint countUniqueFractions(int num[],                int den[], int N){         // Hash-map to store the fractions    // in its lowest form    map, int> mp;         // Loop to iterate over the    // fractions and store is lowest    // form in the hash-map    for (int i = 0; i < N; i++) {        int numer, denom;                 // To find the Lowest form        numer = num[i] / gcd(num[i], den[i]);        denom = den[i] / gcd(num[i], den[i]);        mp[make_pair(numer, denom)] += 1;    }         return mp.size();} // Driver codeint main(){    int N = 6;         // Numerator Array    int num[] = { 1, 40, 20, 5, 6, 7 };         // Denominator Array    int den[] = { 10, 40, 2, 5, 12, 14 };         cout << countUniqueFractions(num, den, N);         return 0;}

## Java

 // Java implementation to find // fractions in its lowest formimport java.lang.*;import java.util.*; class GFG{     static class pair{    int x, y;    pair(int x,int y)    {        this.x = x;        this.y = y;    }     @Override    public int hashCode()    {        return this.x;    }         @Override    public boolean equals(Object obj)    {                 // If both the object references are        // referring to the same object.        if(this == obj)        return true;                 // It checks if the argument is of the        // type pair by comparing the classes        // of the passed argument and this object.        // if(!(obj instanceof pair)) return        // false; ---> avoid.        if(obj == null ||           obj.getClass() !=          this.getClass())            return false;                 // Type casting of the argument.        pair geek = (pair) obj;                 // comparing the state of argument with        // the state of 'this' Object.        return (geek.x == this.x &&                geek.y == this.y);    }} // Recursive function to// find gcd of a and bstatic int gcd(int a, int b){    if (b == 0)        return a;             return gcd(b, a % b);} // Function to count the unique// fractios in the given arraystatic int countUniqueFractions(int num[],                                int den[], int N){         // Hash-map to store the fractions    // in its lowest form    Map mp = new HashMap<>();         // Loop to iterate over the    // fractions and store is lowest    // form in the hash-map    for(int i = 0; i < N; i++)    {                 // To find the Lowest form        int numer = num[i] / gcd(num[i], den[i]);        int denom = den[i] / gcd(num[i], den[i]);        pair tmp = new pair(numer, denom);        mp.put(tmp, 1);    }    return mp.size();} // Driver Codepublic static void main (String[] args){    int N = 6;         // Numerator Array    int num[] = { 1, 40, 20, 5, 6, 7 };         // Denominator Array    int den[] = { 10, 40, 2, 5, 12, 14 };         System.out.print(countUniqueFractions(num, den, N));}} // This code is contributed by offbeat

## Python3

 # Python3 implementation to find# fractions in its lowest formfrom collections import defaultdict # Recursive function to# find gcd of a and bdef gcd(a, b):     if (b == 0):        return a    return gcd(b, a % b) # Function to count the unique# fractios in the given arraydef countUniqueFractions(num, den, N):         # Hash-map to store the fractions    # in its lowest form    mp = defaultdict(int)         # Loop to iterate over the    # fractions and store is lowest    # form in the hash-map    for i in range(N):                 # To find the Lowest form        numer = num[i] // gcd(num[i], den[i])        denom = den[i] // gcd(num[i], den[i])        mp[(numer, denom)] += 1         return len(mp) # Driver codeif __name__ == "__main__":         N = 6         # Numerator Array    num = [ 1, 40, 20, 5, 6, 7 ]         # Denominator Array    den = [ 10, 40, 2, 5, 12, 14 ]         print(countUniqueFractions(num, den, N)) # This code is contributed by chitranayal

## Javascript

 
Output:
4

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer Geeks Classes Live

My Personal Notes arrow_drop_up