Given Mth and Nth term of a Geometric progression. Find its Pth term.
Examples:
Input: m = 10, n = 5, mth = 2560, nth = 80, p = 30
Output: pth = 81920
Input: m = 8, n = 2, mth = 1250, nth = 960, p = 15
Output: 24964.4
Approach:
Let a is the first term and r is the common ratio of the given Geometric Progression. Therefore
mth term = a * pow ( r, (m-1) ) ....... (i) and nth term = a * pow ( r, (n-1) ) ....... (ii)
For convenience, it is assumed that m > n
From these 2 equations,
Since we have given values m, n, mth term, and nth term, therefore
r = pow(A/B, 1.0/(m-n))
and
Now put the value of r in any of above two-equation and calculate the value of a.
a = mth term / pow ( r, (m-1) ) or
a = nth term / pow ( r, (n-1) )
After finding the value of a and r, use the formula of Pth terms of a GP.
pth term of GP = a * pow ( r, (p-1.0) );
Below is the implementation of the above approach:
#include <cmath> #include <iostream> #include <vector> using namespace std;
// function to calculate the value // of the a and r of geometric series pair< double , double > values_of_r_and_a( double m,
double n,
double mth,
double nth)
{ double a, r;
if (m < n) {
swap(m, n);
swap(mth, nth);
}
// calculate value of r using formula
r = pow (mth / nth, 1.0 / (m - n));
// calculate value of a using value of r
a = mth / pow (r, (m - 1));
// push both values in the vector and return it
return make_pair(a, r);
} // function to calculate the value // of pth term of the series double FindSum( int m, int n, double mth,
double nth, int p)
{ pair< double , double > ar;
// first calculate value of a and r
ar = values_of_r_and_a(m, n, mth, nth);
double a = ar.first;
double r = ar.second;
// calculate pth term by using formula
double pth = a * pow (r, (p - 1.0));
// return the value of pth term
return pth;
} // Driven program to test int main()
{ int m = 10, n = 5, p = 15;
double mth = 2560, nth = 80;
cout << FindSum(m, n, mth, nth, p)
<< endl;
return 0;
} |
// Java implementation of the above approach import java.util.ArrayList;
class GFG
{ // function to calculate the value // of the a and r of geometric series static ArrayList values_of_r_and_a( double m, double n,
double mth, double nth)
{ if (m < n)
{
double t = m;
n = m;
m = t;
t = mth;
mth = nth;
nth = t;
}
// calculate value of r using formula
double r = Math.pow(mth / nth, 1.0 / (m - n));
// calculate value of a using value of r
double a = mth / Math.pow(r, (m - 1 ));
// push both values in the vector
// and return it
ArrayList arr = new ArrayList();
arr.add(a);
arr.add(r);
return arr;
} // function to calculate the value // of pth term of the series static double FindSum( double m, double n,
double mth, double nth,
double p)
{ // first calculate value of a and r
ArrayList ar = values_of_r_and_a(m, n, mth, nth);
double a = ( double )ar.get( 0 );
double r = ( double )ar.get( 1 );
// calculate pth term by using formula
double pth = a * Math.pow(r, (p - 1.0 ));
// return the value of pth term
return pth;
} // Driver Code public static void main(String[] args)
{ double m = 10 ;
double n = 5 ;
double p = 15 ;
double mth = 2560 ;
double nth = 80 ;
System.out.println(( int )FindSum(m, n, mth, nth, p));
} } // This code has been contributed by 29AjayKumar |
# Python3 program for above approach # function to calculate the value # of the a and r of geometric series def values_of_r_and_a(m, n, mth, nth):
a, r = 0.0 , 0.0
if (m < n):
m, n = n, m
mth, nth = mth, nth
# calculate value of r using formula
r = pow (mth / / nth, 1.0 / (m - n))
# calculate value of a using value of r
a = mth / / pow (r, (m - 1 ))
# push both values in the vector
# and return it
return a, r
# function to calculate the value # of pth term of the series def FindSum(m, n, mth, nth, p):
# first calculate value of a and r
a,r = values_of_r_and_a(m, n, mth, nth)
# calculate pth term by using formula
pth = a * pow (r, (p - 1.0 ))
# return the value of pth term
return pth
# Driven Code m, n, p = 10 , 5 , 15
mth, nth = 2560.0 , 80.0
print (FindSum(m, n, mth, nth, p))
# This code is contributed by # Mohit kumar 29 |
// C# implementation of the above approach using System;
using System.Collections;
class GFG
{ // function to calculate the value // of the a and r of geometric series static ArrayList values_of_r_and_a( double m, double n,
double mth, double nth)
{ if (m < n)
{
double t = m;
n = m;
m = t;
t = mth;
mth = nth;
nth = t;
}
// calculate value of r using formula
double r = Math.Pow(mth / nth, 1.0 / (m - n));
// calculate value of a using value of r
double a = mth / Math.Pow(r, (m - 1));
// push both values in the vector
// and return it
ArrayList arr = new ArrayList();
arr.Add(a);
arr.Add(r);
return arr;
} // function to calculate the value // of pth term of the series static double FindSum( double m, double n,
double mth, double nth,
double p)
{ // first calculate value of a and r
ArrayList ar = values_of_r_and_a(m, n, mth, nth);
double a = ( double )ar[0];
double r = ( double )ar[1];
// calculate pth term by using formula
double pth = a * Math.Pow(r, (p - 1.0));
// return the value of pth term
return pth;
} // Driver Code static void Main()
{ double m = 10;
double n = 5;
double p = 15;
double mth = 2560;
double nth = 80;
Console.WriteLine(FindSum(m, n, mth, nth, p));
} } // This code is contributed by mits |
<?php // Php implementation of the above approach function swap( $a1 , $a2 )
{ $temp = $a1 ;
$a1 = $a2 ;
$a2 = $temp ;
} // function to calculate the value // of the a and r of geometric series function values_of_r_and_a( $m , $n , $mth , $nth )
{ if ( $m < $n )
{
swap( $m , $n );
swap( $mth , $nth );
}
// calculate value of r using formula
$r = pow( $mth / $nth , 1.0 / ( $m - $n ));
// calculate value of a using value of r
$a = $mth / pow( $r , ( $m - 1));
// push both values in the vector
// and return it
return array ( $a , $r );
} // function to calculate the value // of pth term of the series function FindSum( $m , $n , $mth , $nth , $p )
{ // first calculate value of a and r
$ar = values_of_r_and_a( $m , $n , $mth , $nth );
$a = $ar [0];
$r = $ar [1];
// calculate pth term by using formula
$pth = $a * pow( $r , ( $p - 1.0));
// return the value of pth term
return $pth ;
} // Driver Code $m = 10;
$n = 5;
$p = 15;
$mth = 2560;
$nth = 80;
echo FindSum( $m , $n , $mth , $nth , $p );
// This code is contributed by Ryuga ?> |
<script> // Javascript implementation of the above approach
// function to calculate the value
// of the a and r of geometric series
function values_of_r_and_a(m, n, mth, nth)
{
if (m < n)
{
let t = m;
n = m;
m = t;
t = mth;
mth = nth;
nth = t;
}
// calculate value of r using formula
let r = Math.pow(mth / nth, 1.0 / (m - n));
// calculate value of a using value of r
let a = mth / Math.pow(r, (m - 1));
// push both values in the vector
// and return it
let arr = [];
arr.push(a);
arr.push(r);
return arr;
}
// function to calculate the value
// of pth term of the series
function FindSum(m, n, mth, nth, p)
{
// first calculate value of a and r
let ar = values_of_r_and_a(m, n, mth, nth);
let a = ar[0];
let r = ar[1];
// calculate pth term by using formula
let pth = a * Math.pow(r, (p - 1.0));
// return the value of pth term
return pth;
}
let m = 10;
let n = 5;
let p = 15;
let mth = 2560;
let nth = 80;
document.write(FindSum(m, n, mth, nth, p));
</script> |
81920
Time Complexity: O(log2m + log2p), where m and p represents the value of the given integers.
Auxiliary Space: O(1), no extra space is required, so it is a constant.