Given an array of n elements, we need to find the geometric mean of the numbers. Generally geometric mean of n numbers is the nth root of their product.
If there are n elements x1, x2, x3, . . ., xn in an array and if we want to calculate the geometric mean of the array elements is Geometric mean = (x1 * x2 * x3 * . . . * xn)1/n
Examples:
Input : arr[] = {1, 2, 3, 4, 5, 6, 7, 8} Output : 3.76435 = (1 * 2 * 3 * 4 * 5 * 6 * 7 * 8)1/8 = 403201/8 = 3.76435 Input : arr[] = {15, 12, 13, 19, 10} Output : 13.447 = (15 * 12 * 13 * 19 * 10)1/5 = 4446001/5 = 13.477
A simple solution is to multiply all numbers first, then find (1/n)-th power of the multiplication.
// Program to calculate the geometric mean // of the given array elements. #include <bits/stdc++.h> using namespace std;
// function to calculate geometric mean // and return float value. float geometricMean( int arr[], int n)
{ // declare product variable and
// initialize it to 1.
float product = 1;
// Compute the product of all the
// elements in the array.
for ( int i = 0; i < n; i++)
product = product * arr[i];
// compute geometric mean through formula
// pow(product, 1/n) and return the value
// to main function.
float gm = pow (product, ( float )1 / n);
return gm;
} // Driver function int main()
{ int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
int n = sizeof (arr) / sizeof (arr[0]);
cout << geometricMean(arr, n);
return 0;
} |
// Program to calculate the geometric mean // of the given array elements. import java.math.*;
class GFG{
// function to calculate geometric mean
// and return float value.
static float geometricMean( int arr[], int n)
{
// declare product variable and
// initialize it to 1.
float product = 1 ;
// Compute the product of all the
// elements in the array.
for ( int i = 0 ; i < n; i++)
product = product * arr[i];
// compute geometric mean through
// formula pow(product, 1/n) and
// return the value to main function.
float gm = ( float )Math.pow(product, ( float ) 1 / n);
return gm;
}
// Driver function
public static void main(String args[])
{
int arr[] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 };
int n = arr.length ;
System.out.println(geometricMean(arr, n));
}
} /*This code is contributed by Nikita Tiwari*/ |
# Python Program to calculate the # geometric mean of the given # array elements. import math
# function to calculate geometric # mean and return float value. def geometricMean(arr, n) :
# declare product variable and
# initialize it to 1.
product = 1
# Compute the product of all the
# elements in the array.
for i in range ( 0 ,n) :
product = product * arr[i]
# compute geometric mean through
# formula pow(product, 1/n) and
# return the value to main function.
gm = ( float )(math. pow (product, ( 1 / n)))
return ( float )(gm)
# Driver function arr = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ]
n = len (arr)
# to print 6 digits after decimal print ( '{0:.6f}' . format (geometricMean(arr, n)))
# This code is contributed by Nikita Tiwari |
// Program to calculate the geometric mean // of the given array elements. using System;
class GFG{
// function to calculate geometric mean
// and return float value.
static float geometricMean( int []arr, int n)
{
// declare product variable and
// initialize it to 1.
float product = 1;
// Compute the product of all the
// elements in the array.
for ( int i = 0; i < n; i++)
product = product * arr[i];
// compute geometric mean through
// formula pow(product, 1/n) and
// return the value to main function.
float gm = ( float )Math.Pow(product, ( float )1 / n);
return gm;
}
// Driver function
public static void Main()
{
int []arr = { 1, 2, 3, 4, 5, 6, 7, 8 };
int n = arr.Length ;
Console.WriteLine(geometricMean(arr, n));
}
} /*This code is contributed by vt_m*/ |
<?php // Program to calculate the geometric mean // of the given array elements. // function to calculate geometric mean // and return float value. function geometricMean( $arr , $n )
{ // declare product variable and
// initialize it to 1.
$product = 1;
// Compute the product of all the
// elements in the array.
for ( $i = 0; $i < $n ; $i ++)
$product = $product * $arr [ $i ];
// compute geometric mean through formula
// pow(product, 1/n) and return the value
// to main function.
$gm = pow( $product , (float)(1 / $n ));
return $gm ;
} // Driver Code $arr = array (1, 2, 3, 4, 5, 6, 7, 8);
$n = sizeof( $arr );
echo (geometricMean( $arr , $n ));
// This code is contributed by Ajit. ?> |
<script> // Javascript program to calculate the geometric mean // of the given array elements. // function to calculate geometric mean
// and return float value.
function geometricMean(arr, n)
{
// declare product variable and
// initialize it to 1.
let product = 1;
// Compute the product of all the
// elements in the array.
for (let i = 0; i < n; i++)
product = product * arr[i];
// compute geometric mean through
// formula pow(product, 1/n) and
// return the value to main function.
let gm = Math.pow(product, 1 / n);
return gm;
}
// driver function let arr = [ 1, 2, 3, 4, 5, 6, 7, 8 ];
let n = arr.length ;
document.write(geometricMean(arr, n));
// This code is contributed by code_hunt.
</script> |
Output:
3.76435
Time Complexity: O(n) where n is size of given array
Auxiliary Space: O(1)
The above solution simply causes overflow. A better solution is to use log. There are n numbers and we need to calculate geometric mean using the formula :
Geometric mean = Antilog((log(x1) + log(x2) + log(x3) + . . . + log(xn))/n)
For calculating the Antilog in programming we use exponent function (exp()).
// Program to calculate the geometric mean // of the given array elements. #include <bits/stdc++.h> using namespace std;
// function to calculate geometric mean // and return float value. float geometricMean( int arr[], int n)
{ // declare sum variable and
// initialize it to 1.
float sum = 0;
// Compute the sum of all the
// elements in the array.
for ( int i = 0; i < n; i++)
sum = sum + log (arr[i]);
// compute geometric mean through formula
// antilog(((log(1) + log(2) + . . . + log(n))/n)
// and return the value to main function.
sum = sum / n;
return exp (sum);
} // Driver function int main()
{ int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
int n = sizeof (arr) / sizeof (arr[0]);
// function call
cout << geometricMean(arr, n);
return 0;
} |
// Java Program to calculate the geometric mean // of the given array elements. import java.io.*;
class GFG
{ // function to calculate geometric mean
// and return float value.
static float geometricMean( int []arr, int n)
{
// declare sum variable and
// initialize it to 1.
float sum = 0 ;
// Compute the sum of all the
// elements in the array.
for ( int i = 0 ; i < n; i++)
sum = sum + ( float )Math.log(arr[i]);
// compute geometric mean through formula
// antilog(((log(1) + log(2) + . . . + log(n))/n)
// and return the value to main function.
sum = sum / n;
return ( float )Math.exp(sum);
}
// Driver function
public static void main (String[] args)
{
int []arr = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 };
int n = arr.length;
// function call
System.out.println(geometricMean(arr, n));
}
} // This code is contributed by vt_m. |
# Program to calculate the # geometric mean of the # given array elements. import math
# function to calculate # geometric mean and # return float value. def geometricMean(arr, n):
# declare sum variable and
# initialize it to 1.
sum = 0 ;
# Compute the sum of all
# the elements in the array.
for i in range (n):
sum = sum + math.log(arr[i]);
# compute geometric mean
# through formula antilog
# (((log(1) + log(2) + . .
# ... + log(n))/n)
# and return the value to
# main function.
sum = sum / n;
return math.exp( sum );
# Driver Code arr = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ];
n = len (arr);
# function call print (geometricMean(arr, n));
# This code is contributed by mits. |
// Program to calculate the geometric mean // of the given array elements. using System;
class GFG {
// function to calculate geometric mean
// and return float value.
static float geometricMean( int []arr, int n)
{
// declare sum variable and
// initialize it to 1.
float sum = 0;
// Compute the sum of all the
// elements in the array.
for ( int i = 0; i < n; i++)
sum = sum + ( float )Math.Log(arr[i]);
// compute geometric mean through formula
// antilog(((log(1) + log(2) + . . . + log(n))/n)
// and return the value to main function.
sum = sum / n;
return ( float )Math.Exp(sum);
}
// Driver function
public static void Main ()
{
int []arr = { 1, 2, 3, 4, 5, 6, 7, 8 };
int n = arr.Length;
// function call
Console.WriteLine(geometricMean(arr, n));
}
} // This code is contributed by vt_m. |
<?php // Program to calculate the geometric mean // of the given array elements. // function to calculate geometric mean // and return float value. function geometricMean( $arr , $n )
{ // declare sum variable and
// initialize it to 1.
$sum = 0;
// Compute the sum of all the
// elements in the array.
for ( $i = 0; $i < $n ; $i ++)
$sum = $sum + log( $arr [ $i ]);
// compute geometric mean
// through formula
// antilog(((log(1) + log(2) +
// . . . + log(n))/n)
// and return the value
$sum = $sum / $n ;
return exp ( $sum );
} // Driver Code
$arr = array (1, 2, 3, 4, 5, 6, 7, 8);
$n = count ( $arr );
// function call
echo geometricMean( $arr , $n );
// This code is contributed by anuj_67. ?> |
<script> // Program to calculate the geometric mean // of the given array elements. // function to calculate geometric mean
// and return float value.
function geometricMean(arr, n)
{
// declare sum variable and
// initialize it to 1.
var sum = 0;
// Compute the sum of all the
// elements in the array.
for ( var i = 0; i < n; i++)
sum = sum + Math.log(arr[i]);
// compute geometric mean through formula
// antilog(((log(1) + log(2) + . . . + log(n))/n)
// and return the value to main function.
sum = sum / n;
return Math.exp(sum);
}
// Driver function
var arr = [ 1, 2, 3, 4, 5, 6, 7, 8 ];
var n = arr.length;
// function call
document.write(geometricMean(arr, n).toFixed(5));
// This code is contributed by bunnyram19.
</script> |
Output:
3.76435
Time Complexity: O(n)
Auxiliary Space: O(1)