Wednesday, July 3, 2024
HomeData ModellingData Structure & AlgorithmFind Pth term of a GP if Mth and Nth terms are...

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: 
 

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>


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.

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

Shaida Kate Naidoo
am passionate about learning the latest technologies available to developers in either a Front End or Back End capacity. I enjoy creating applications that are well designed and responsive, in addition to being user friendly. I thrive in fast paced environments. With a diverse educational and work experience background, I excel at collaborating with teams both local and international. A versatile developer with interests in Software Development and Software Engineering. I consider myself to be adaptable and a self motivated learner. I am interested in new programming technologies, and continuous self improvement.
RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments