Given an array of rational numbers, the task is to find the LCM of these numbers.
Examples:
Input : vect[] = {2/7, 3/14, 5/3} Output : 30/1 Input : vect[] = {3/14, 5/3} Output : 15/1 Input : vect[] = {3/4, 3/2} Output : 3/2
First find the lcm of all numerator of rational number then find the gcd of all the denominator of rational number then divide lcm of all numerator/ gcd of all the denominator this the lcm of rational number’s.
Formula:-
LCM of all the numerator of Rational number's lcm = ----------------------------------------------- GCD of all the denominator of Rational number's
Implementation:
C++
// CPP program to find LCM of given array #include <bits/stdc++.h> using namespace std; // get lcm of two numbers int LCM( int a, int b) { return (a * b) / (__gcd(a, b)); } // Finds LCM of numerators int lcmOfNumerator(vector<pair< int , int > > vect) { // calculate the lcm of all numerators int lcm = vect[0].first; for ( int i = 1; i < vect.size(); i++) lcm = LCM(vect[i].first, lcm); // return all numerator lcm return lcm; } // Get GCD of all the denominators int gcdOfDemoninators(vector<pair< int , int > > vect) { // calculate the gcd of all the denominators int gcd = vect[0].second; for ( int i = 1; i < vect.size(); i++) gcd = __gcd(vect[i].second, gcd); // return all denominator gcd return gcd; } // find lcm of all the rational number void lcmOfRationals(vector<pair< int , int > > vect) { // return the LCM of all numerator/ GCD of all // denominator cout << lcmOfNumerator(vect) << "/" << gcdOfDemoninators(vect); } // Driver code int main() { vector<pair< int , int > > vect; // give rational number 2/7, 3/14, 5/3 // make pair as a numerator and denominator vect.push_back(make_pair(2, 7)); vect.push_back(make_pair(3, 14)); vect.push_back(make_pair(5, 3)); lcmOfRationals(vect); return 0; } |
Java
// JAVA program to find LCM of given array import java.util.*; class GFG { static class pair { int first, second; public pair( int first, int second) { this .first = first; this .second = second; } } // get lcm of two numbers static int LCM( int a, int b) { return (a * b) / (__gcd(a, b)); } static int __gcd( int a, int b) { return b == 0 ? a:__gcd(b, a % b); } // Finds LCM of numerators static int lcmOfNumerator(Vector<pair> vect) { // calculate the lcm of all numerators int lcm = vect.get( 0 ).first; for ( int i = 1 ; i < vect.size(); i++) lcm = LCM(vect.get(i).first, lcm); // return all numerator lcm return lcm; } // Get GCD of all the denominators static int gcdOfDemoninators(Vector<pair> vect) { // calculate the gcd of all the denominators int gcd = vect.get( 0 ).second; for ( int i = 1 ; i < vect.size(); i++) gcd = __gcd(vect.get(i).second, gcd); // return all denominator gcd return gcd; } // find lcm of all the rational number static void lcmOfRationals(Vector<pair> vect) { // return the LCM of all numerator/ GCD of all // denominator System.out.print(lcmOfNumerator(vect)+ "/" + gcdOfDemoninators(vect)); } // Driver code public static void main(String[] args) { Vector<pair> vect = new Vector<pair>(); // give rational number 2/7, 3/14, 5/3 // make pair as a numerator and denominator vect.add( new pair( 2 , 7 )); vect.add( new pair( 3 , 14 )); vect.add( new pair( 5 , 3 )); lcmOfRationals(vect); } } // This code is contributed by Rajput-Ji |
Python
# Python program to find LCM of given array import math # get lcm of two numbers def LCM(a, b): return (a * b) / / (math.gcd(a, b)) # Finds LCM of numerators def lcmOfNumerator(vect): # calculate the lcm of all numerators lcm = vect[ 0 ][ 0 ] for i in range ( 1 , len (vect)): lcm = LCM(vect[i][ 0 ], lcm) # return all numerator lcm return lcm # Get GCD of all the denominators def gcdOfDemoninators(vect): # calculate the gcd of all the denominators gcd = vect[ 0 ][ 1 ] for i in range ( 1 , len (vect)): gcd = math.gcd(vect[i][ 1 ], gcd) # return all denominator gcd return gcd # find lcm of all the rational number def lcmOfRationals(vect): # return the LCM of all numerator/ GCD of all # denominator print (lcmOfNumerator(vect), "/" , gcdOfDemoninators(vect), sep = "") # Driver code vect = [] # give rational number 2/7, 3/14, 5/3 # make pair as a numerator and denominator vect.append(( 2 , 7 )) vect.append(( 3 , 14 )) vect.append(( 5 , 3 )) lcmOfRationals(vect) # This code is contributed by SHUBHAMSINGH10 |
C#
// C# program to find LCM of given array using System; using System.Collections.Generic; class GFG { class pair { public int first, second; public pair( int first, int second) { this .first = first; this .second = second; } } // get lcm of two numbers static int LCM( int a, int b) { return (a * b) / (__gcd(a, b)); } static int __gcd( int a, int b) { return b == 0? a:__gcd(b, a % b); } // Finds LCM of numerators static int lcmOfNumerator(List<pair> vect) { // calculate the lcm of all numerators int lcm = vect[0].first; for ( int i = 1; i < vect.Count; i++) lcm = LCM(vect[i].first, lcm); // return all numerator lcm return lcm; } // Get GCD of all the denominators static int gcdOfDemoninators(List<pair> vect) { // calculate the gcd of all the denominators int gcd = vect[0].second; for ( int i = 1; i < vect.Count; i++) gcd = __gcd(vect[i].second, gcd); // return all denominator gcd return gcd; } // find lcm of all the rational number static void lcmOfRationals(List<pair> vect) { // return the LCM of all numerator/ GCD of all // denominator Console.Write(lcmOfNumerator(vect)+ "/" + gcdOfDemoninators(vect)); } // Driver code public static void Main(String[] args) { List<pair> vect = new List<pair>(); // give rational number 2/7, 3/14, 5/3 // make pair as a numerator and denominator vect.Add( new pair(2, 7)); vect.Add( new pair(3, 14)); vect.Add( new pair(5, 3)); lcmOfRationals(vect); } } // This code is contributed by 29AjayKumar |
Javascript
<script> // JAVASCRIPT program to find LCM of given array class pair { constructor(first, second) { this .first = first; this .second = second; } } // get lcm of two numbers function LCM(a, b) { return Math.floor((a * b) / (__gcd(a, b))); } function __gcd(a, b) { return b == 0 ? a : __gcd(b, a % b); } // Finds LCM of numerators function lcmOfNumerator(vect) { // calculate the lcm of all numerators let lcm = vect[0].first; for (let i = 1; i < vect.length; i++) lcm = LCM(vect[i].first, lcm); // return all numerator lcm return lcm; } // Get GCD of all the denominators function gcdOfDemoninators(vect) { // calculate the gcd of all the denominators let gcd = vect[0].second; for (let i = 1; i < vect.length; i++) gcd = __gcd(vect[i].second, gcd); // return all denominator gcd return gcd; } // find lcm of all the rational number function lcmOfRationals(vect) { // return the LCM of all numerator/ GCD of all // denominator document.write(lcmOfNumerator(vect) + "/" + gcdOfDemoninators(vect)); } // Driver code let vect = []; // give rational number 2/7, 3/14, 5/3 // make pair as a numerator and denominator vect.push( new pair(2, 7)); vect.push( new pair(3, 14)); vect.push( new pair(5, 3)); lcmOfRationals(vect); // This code is contributed by _SAURABH_JAISWAL </script> |
30/1
Time Complexity: O(n log(min(v))), where v is the minimum element of vector
Auxiliary Space: O(1)
Please suggest if someone has a better solution which is more efficient in terms of space and time.
This article is contributed by Aarti_Rathi. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!