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:
C++
#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
// 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
# 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#
// 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 // 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 ?> |
Javascript
<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.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!