Open In App

Find Pth term of a GP if Mth and Nth terms are given

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>

Output: 
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.


Article Tags :