Minimum LCM and GCD possible among all possible sub-arrays
Last Updated :
22 Jun, 2022
Given an array arr[] of N positive integers, the task is to find the minimum LCM and GCD between elements of all possible sub-array.
Examples:
Input: arr[] = {4, 4, 8}
Output: LCM = 4, GCD = 4
All possible sub-arrays are:
{4} -> LCM = 4, GCD = 4
{8} -> LCM = 8, GCD = 8
{4, 8} -> LCM = 8, GCD = 4
Input: arr[] = {2, 66, 14, 521}
Output: LCM = 2, GCD = 1
Approach: We have to approach this problem greedily. It is obvious that when we decrease the number of elements then the LCM will become smaller and when we increase the number of elements then the GCD will become smaller. So we will take the smallest element of the array which is a single element and will be the required LCM. Now for GCD, minimum GCD will be the GCD of all the elements of the array.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int minGCD( int arr[], int n)
{
int minGCD = 0;
for ( int i = 0; i < n; i++)
minGCD = __gcd(minGCD, arr[i]);
return minGCD;
}
int minLCM( int arr[], int n)
{
int minLCM = arr[0];
for ( int i = 1; i < n; i++)
minLCM = min(minLCM, arr[i]);
return minLCM;
}
int main()
{
int arr[] = { 2, 66, 14, 521 };
int n = sizeof (arr) / sizeof (arr[0]);
cout << "LCM = " << minLCM(arr, n)
<< ", GCD = " << minGCD(arr, n);
return 0;
}
|
Java
class GFG
{
static int __gcd( int a, int b)
{
if (a == 0 )
return b;
return __gcd(b % a, a);
}
static int minGCD( int arr[], int n)
{
int minGCD = 0 ;
for ( int i = 0 ; i < n; i++)
minGCD = __gcd(minGCD, arr[i]);
return minGCD;
}
static int minLCM( int arr[], int n)
{
int minLCM = arr[ 0 ];
for ( int i = 1 ; i < n; i++)
minLCM = Math.min(minLCM, arr[i]);
return minLCM;
}
public static void main(String[] args)
{
int arr[] = { 2 , 66 , 14 , 521 };
int n = arr.length;
System.out.println( "LCM = " + minLCM(arr, n)
+ " GCD = " +minGCD(arr, n));
}
}
|
Python3
from math import gcd
def minGCD(arr, n) :
minGCD = 0 ;
for i in range (n) :
minGCD = gcd(minGCD, arr[i]);
return minGCD;
def minLCM(arr, n) :
minLCM = arr[ 0 ];
for i in range ( 1 , n) :
minLCM = min (minLCM, arr[i]);
return minLCM;
if __name__ = = "__main__" :
arr = [ 2 , 66 , 14 , 521 ];
n = len (arr);
print ( "LCM = " , minLCM(arr, n),
", GCD =" , minGCD(arr, n));
|
C#
using System;
class GFG
{
static int __gcd( int a, int b)
{
if (a == 0)
return b;
return __gcd(b % a, a);
}
static int minGCD( int [] arr, int n)
{
int minGCD = 0;
for ( int i = 0; i < n; i++)
minGCD = __gcd(minGCD, arr[i]);
return minGCD;
}
static int minLCM( int [] arr, int n)
{
int minLCM = arr[0];
for ( int i = 1; i < n; i++)
minLCM = Math.Min(minLCM, arr[i]);
return minLCM;
}
public static void Main()
{
int [] arr = { 2, 66, 14, 521 };
int n = arr.Length;
Console.WriteLine( "LCM = " + minLCM(arr, n) +
", GCD = " + minGCD(arr, n));
}
}
|
PHP
<?php
function __gcd( $a , $b )
{
if ( $a == 0)
return $b ;
return __gcd( $b % $a , $a );
}
function minGCD( $arr , $n )
{
$minGCD = 0;
for ( $i = 0; $i < $n ; $i ++)
$minGCD = __gcd( $minGCD ,
$arr [ $i ]);
return $minGCD ;
}
function minLCM( $arr , $n )
{
$minLCM = $arr [0];
for ( $i = 1; $i < $n ; $i ++)
$minLCM = min( $minLCM ,
$arr [ $i ]);
return $minLCM ;
}
$arr = array (2, 66, 14, 521 );
$n = sizeof( $arr );
echo "LCM = " . minLCM( $arr , $n ) . ", " ;
echo "GCD = " . minGCD( $arr , $n );
?>
|
Javascript
<script>
function __gcd(a , b) {
if (a == 0)
return b;
return __gcd(b % a, a);
}
function minGCD(arr , n) {
var minGCD = 0;
for (i = 0; i < n; i++)
minGCD = __gcd(minGCD, arr[i]);
return minGCD;
}
function minLCM(arr , n) {
var minLCM = arr[0];
for (i = 1; i < n; i++)
minLCM = Math.min(minLCM, arr[i]);
return minLCM;
}
var arr = [ 2, 66, 14, 521 ];
var n = arr.length;
document.write( "LCM = " + minLCM(arr, n) + " GCD = " + minGCD(arr, n));
</script>
|
Time Complexity: O(NlogN)
Auxiliary Space: O(1), since no extra space has been taken.
Share your thoughts in the comments
Please Login to comment...