HCF of array of fractions (or rational numbers) - GeeksforGeeks

14 Jul, 2021
Given a fraction series. Find the H.C.F of a given fraction series. Examples:  
Input : [{2, 5}, {8, 9}, {16, 81}, {10, 27}]
Output :  2, 405 
Explanation : 2/405 is the largest number that
divides all 2/5, 8/9, 16/81 and 10/27.

Input : [{9, 10}, {12, 25}, {18, 35}, {21, 40}]
Output : 3, 1400
 
Approach:  
Find the H.C.F of numerators. Find the L.C.M of denominators. Calculate fraction of H.C.F/L.C.M. Reduce the fraction to Lowest Fraction.  
 
C++
Java
Python3
C#
Javascript
// CPP program to find HCF of array of// rational numbers (fractions).#include <iostream>using namespace std; // hcf of two numberint gcd(int a, int b){    if (a % b == 0)        return b;    else        return (gcd(b, a % b));} // find hcf of numerator seriesint findHcf(int** arr, int size){    int ans = arr[0][0];       for (int i = 1; i < size; i++)           ans = gcd(ans, arr[i][0]);     // return hcf of numerator    return (ans);} // find lcm of denominator seriesint findLcm(int** arr, int size){    // ans contains LCM of arr[0][1], ..arr[i][1]    int ans = arr[0][1];    for (int i = 1; i < size; i++)        ans = (((arr[i][1] * ans)) /               (gcd(arr[i][1], ans)));     // return lcm of denominator    return (ans);} // Core Functionint* hcfOfFraction(int** arr, int size){    // found hcf of numerator    int hcf_of_num = findHcf(arr, size);     // found lcm of denominator    int lcm_of_deno = findLcm(arr, size);     int* result = new int[2];    result[0] = hcf_of_num;    result[1] = lcm_of_deno;     for (int i = result[0] / 2; i > 1; i--)    {        if ((result[1] % i == 0) && (result[0] % i == 0))        {            result[1] /= i;            result[0] /= i;        }    }     // return result    return (result);} // Main functionint main(){    int size = 4;    int** arr = new int*[size];     // Initialize the every row    // with size 2 (1 for numerator    // and 2 for denominator)    for (int i = 0; i < size; i++)        arr[i] = new int[2];     arr[0][0] = 9;    arr[0][1] = 10;    arr[1][0] = 12;    arr[1][1] = 25;    arr[2][0] = 18;    arr[2][1] = 35;    arr[3][0] = 21;    arr[3][1] = 40;         // function for calculate the result    int* result = hcfOfFraction(arr, size);         // print the result    cout << result[0] << ", " << result[1] << endl;    return 0;}
// Java program to find HCF of array of// rational numbers (fractions).class GFG{ // hcf of two numberstatic int gcd(int a, int b){    if (a % b == 0)        return b;    else        return (gcd(b, a % b));} // find hcf of numerator seriesstatic int findHcf(int [][]arr, int size){    int ans = arr[0][0];    for (int i = 1; i < size; i++)        ans = gcd(ans, arr[i][0]);     // return hcf of numerator    return (ans);} // find lcm of denominator seriesstatic int findLcm(int[][] arr, int size){    // ans contains LCM of arr[0][1], ..arr[i][1]    int ans = arr[0][1];    for (int i = 1; i < size; i++)        ans = (((arr[i][1] * ans)) /            (gcd(arr[i][1], ans)));     // return lcm of denominator    return (ans);} // Core Functionstatic int[] hcfOfFraction(int[][] arr, int size){    // found hcf of numerator    int hcf_of_num = findHcf(arr, size);     // found lcm of denominator    int lcm_of_deno = findLcm(arr, size);     int[] result = new int[2];    result[0] = hcf_of_num;    result[1] = lcm_of_deno;     for (int i = result[0] / 2; i > 1; i--)    {        if ((result[1] % i == 0) && (result[0] % i == 0))        {            result[1] /= i;            result[0] /= i;        }    }     // return result    return (result);} // Driver codepublic static void main(String[] args){    int size = 4;    int[][] arr = new int[size][size];     // Initialize the every row    // with size 2 (1 for numerator    // and 2 for denominator)    for (int i = 0; i < size; i++)        arr[i] = new int[2];     arr[0][0] = 9;    arr[0][1] = 10;    arr[1][0] = 12;    arr[1][1] = 25;    arr[2][0] = 18;    arr[2][1] = 35;    arr[3][0] = 21;    arr[3][1] = 40;         // function for calculate the result    int[] result = hcfOfFraction(arr, size);         // print the result    System.out.println(result[0] + ", " + result[1]);    }} /* This code contributed by PrinciRaj1992 */
# Python 3 program to find HCF of array offrom math import gcd # find hcf of numerator seriesdef findHcf(arr, size):    ans = arr[0][0]    for i in range(1, size, 1):        ans = gcd(ans, arr[i][0])     # return hcf of numerator    return (ans) # find lcm of denominator seriesdef findLcm(arr, size):         # ans contains LCM of arr[0][1], ..arr[i][1]    ans = arr[0][1]    for i in range(1, size, 1):        ans = int((((arr[i][1] * ans)) /                (gcd(arr[i][1], ans))))     # return lcm of denominator    return (ans) # Core Functiondef hcfOfFraction(arr, size):         # found hcf of numerator    hcf_of_num = findHcf(arr, size)     # found lcm of denominator    lcm_of_deno = findLcm(arr, size)     result = [0 for i in range(2)]    result[0] = hcf_of_num    result[1] = lcm_of_deno     i = int(result[0] / 2)    while(i > 1):        if ((result[1] % i == 0) and            (result[0] % i == 0)):            result[1] = int(result[1] / i)            result[0] = (result[0] / i)     # return result    return (result) # Driver Codeif __name__ == '__main__':    size = 4    arr = [0 for i in range(size)]     # Initialize the every row    # with size 2 (1 for numerator    # and 2 for denominator)    for i in range(size):        arr[i] = [0 for i in range(2)]     arr[0][0] = 9    arr[0][1] = 10    arr[1][0] = 12    arr[1][1] = 25    arr[2][0] = 18    arr[2][1] = 35    arr[3][0] = 21    arr[3][1] = 40         # function for calculate the result    result = hcfOfFraction(arr, size)         # print the result    print(result[0], ",", result[1])     # This code is contributed by# Surendra_Gangwar
// C# program to find HCF of array of// rational numbers (fractions).using System; class GFG{ // hcf of two numberstatic int gcd(int a, int b){    if (a % b == 0)        return b;    else        return (gcd(b, a % b));} // find hcf of numerator seriesstatic int findHcf(int [,]arr, int size){    int ans = arr[0, 0];    for (int i = 1; i < size; i++)        ans = gcd(ans, arr[i, 0]);     // return hcf of numerator    return (ans);} // find lcm of denominator seriesstatic int findLcm(int[,] arr, int size){    // ans contains LCM of arr[0,1], ..arr[i,1]    int ans = arr[0,1];    for (int i = 1; i < size; i++)        ans = (((arr[i, 1] * ans)) /            (gcd(arr[i, 1], ans)));     // return lcm of denominator    return (ans);} // Core Functionstatic int[] hcfOfFraction(int[,] arr, int size){    // found hcf of numerator    int hcf_of_num = findHcf(arr, size);     // found lcm of denominator    int lcm_of_deno = findLcm(arr, size);     int[] result = new int[2];    result[0] = hcf_of_num;    result[1] = lcm_of_deno;     for (int i = result[0] / 2; i > 1; i--)    {        if ((result[1] % i == 0) && (result[0] % i == 0))        {            result[1] /= i;            result[0] /= i;        }    }     // return result    return (result);} // Driver codepublic static void Main(String[] args){    int size = 4;    int[,] arr = new int[size, size];     // Initialize the every row    // with size 2 (1 for numerator    // and 2 for denominator)      arr[0, 0] = 9;    arr[0, 1] = 10;    arr[1, 0] = 12;    arr[1, 1] = 25;    arr[2, 0] = 18;    arr[2, 1] = 35;    arr[3, 0] = 21;    arr[3, 1] = 40;         // function for calculate the result    int[] result = hcfOfFraction(arr, size);         // print the result    Console.WriteLine(result[0] + ", " + result[1]);    }} // This code has been contributed by 29AjayKumar
<script>// Javascript program to find HCF of array of// rational numbers (fractions). // hcf of two numberfunction gcd(a,b){    if (a % b == 0)        return b;    else        return (gcd(b, a % b));} // find hcf of numerator seriesfunction findHcf(arr,size){    let ans = arr[0][0];    for (let i = 1; i < size; i++)        ans = gcd(ans, arr[i][0]);       // return hcf of numerator    return (ans);} // find lcm of denominator seriesfunction findLcm(arr,size){    // ans contains LCM of arr[0][1], ..arr[i][1]    let ans = arr[0][1];    for (let i = 1; i < size; i++)        ans = Math.floor(((arr[i][1] * ans)) /            (gcd(arr[i][1], ans)));       // return lcm of denominator    return (ans);} // Core Functionfunction hcfOfFraction(arr,size){    // found hcf of numerator    let hcf_of_num = findHcf(arr, size);       // found lcm of denominator    let lcm_of_deno = findLcm(arr, size);       let result = new Array(2);    result[0] = hcf_of_num;    result[1] = lcm_of_deno;       for (let i = result[0] / 2; i > 1; i--)    {        if ((result[1] % i == 0) && (result[0] % i == 0))        {            result[1] /= i;            result[0] /= i;        }    }       // return result    return (result);} // Driver codelet size = 4;let arr = new Array(size); // Initialize the every row// with size 2 (1 for numerator// and 2 for denominator)for (let i = 0; i < size; i++)    arr[i] = new Array(2); arr[0][0] = 9;arr[0][1] = 10;arr[1][0] = 12;arr[1][1] = 25;arr[2][0] = 18;arr[2][1] = 35;arr[3][0] = 21;arr[3][1] = 40; // function for calculate the resultlet result = hcfOfFraction(arr, size); // print the resultdocument.write(result[0] + ", " + result[1]+"<br>"); // This code is contributed by rag2127</script>
Output:  
3, 1400
 
princiraj1992
29AjayKumar
SURENDRA_GANGWAR
rag2127
GCD-LCM
Arrays
Mathematical
Arrays
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Introduction to Arrays
Multidimensional Arrays in Java
Linear Search
Linked List vs Array
Python | Using 2D arrays/lists the right way
Program for Fibonacci numbers
Write a program to print all permutations of a given string
C++ Data Types
Set in C++ Standard Template Library (STL)
Coin Change | DP-7