Open In App

Program to find Nth term in the given Series

Improve
Improve
Like Article
Like
Save
Share
Report

Given a number N. The task is to write a program to find the N-th term in the below series:
 

1, 1, 2, 3, 4, 9, 8, 27, 16, 81, 32, 243, 64, 729, 128, 2187…

Examples
 

Input : 4
Output : 3
Input : 11
Output : 32

 

On observing carefully, you will find that the series is a mixture of 2 series: 
 

  1. All the odd terms in this series form a geometric series.
  2. All the even terms form yet another geometric series.

The approach to solving the problem is quite simple. The odd positioned terms in the given series form a GP series with first term = 1 and common ration = 2. Similarly, the even positioned terms in the given series form a GP series with first term = 1 and common ration = 3.
Therefore first check whether the input number N is even or odd. If it is even, set N=N/2(since there are Two GP series running parallelly) and find the Nth term by using formula an = a1·rn-1 with r=3. 
Similarly, if N is odd, set N=(n/2)+1 and do the same as previous with r=2.
Below is the implementation of above approach: 
 

C++




// C++ program to find Nth term
// in the given Series
#include <iostream>
#include <math.h>
 
using namespace std;
 
// Function to find the nth term
// in the given series
void findNthTerm(int n)
{
    // If input number is even
    if (n % 2 == 0) {
        n = n / 2;
        cout << pow(3, n - 1) << endl;
    }
    // If input number is odd
    else {
        n = (n / 2) + 1;
        cout << pow(2, n - 1) << endl;
    }
}
 
// Driver Code
int main()
{
    int N = 4;
    findNthTerm(N);
 
    N = 11;
    findNthTerm(N);
 
    return 0;
}


Java




// Java program to find Nth term
// in the given Series
import java.io.*;
import java.util.*;
import java.lang.*;
 
class GFG
{
// Function to find the nth term
// in the given series
static void findNthTerm(int n)
{
    // If input number is even
    if (n % 2 == 0)
    {
        n = n / 2;
        System.out.print(Math.pow(3, n - 1) + "\n");
    }
    // If input number is odd
    else
    {
        n = (n / 2) + 1;
        System.out.print(Math.pow(2, n - 1) + "\n");
    }
}
 
// Driver Code
public static void main(String[] args)
{
    int N = 4;
    findNthTerm(N);
 
    N = 11;
    findNthTerm(N);
 
}
}
 
// This code is contributed
// by Akanksha Rai(Abby_akku)


Python3




# Python3 program to find Nth term
# in the given Series
 
# Function to find the nth term
# in the given series
def findNthTerm(n):
    # If input number is even
    if n % 2 == 0:
        n //= 2
        print(3 ** (n - 1))
    # If input number is odd
    else:
        n = (n // 2) + 1
        print(2 ** (n - 1))
 
# Driver Code
if __name__=='__main__':
    N = 4
    findNthTerm(N)
 
    N = 11
    findNthTerm(N)
 
# This code is contributed
# by vaibhav29498


C#




// C# program to find Nth term
// in the given Series
using System;
 
class GFG
{
// Function to find the nth
// term in the given series
static void findNthTerm(int n)
{
    // If input number is even
    if (n % 2 == 0)
    {
        n = n / 2;
        Console.WriteLine(Math.Pow(3, n - 1));
    }
     
    // If input number is odd
    else
    {
        n = (n / 2) + 1;
        Console.WriteLine(Math.Pow(2, n - 1));
    }
}
 
// Driver Code
public static void Main()
{
    int N = 4;
    findNthTerm(N);
 
    N = 11;
    findNthTerm(N);
}
}
 
// This code is contributed
// by chandan_jnu.


Javascript




<script>
 
// JavaScript program to find Nth term 
// in the given Series
 
    // Function to find the nth term 
    // in the given series
    function findNthTerm(n)
    {
        // If input number is even
        if (n % 2 == 0) {
            n = Math.floor(n / 2);
            document.write(Math.pow(3, n - 1) + "<br>");
        }
        // If input number is odd
        else {
            n = Math.floor(n / 2) + 1;
            document.write(Math.pow(2, n - 1) + "<br>");
        }
    }
   
    // Driver Code
  
    let N = 4;
    findNthTerm(N);
   
    N = 11;
    findNthTerm(N);
 
// This code is contributed by Mayank Tyagi
 
</script>


PHP




<?php
// php program to find Nth term
// in the given Series
 
// Function to find the nth term
// in the given series
function findNthTerm($n)
{
    // If input number is even
    if ($n % 2 == 0)
    {
        $n = $n / 2;
        echo pow(3, $n - 1) . "\n";
    }
    // If input number is odd
    else
    {
        $n = ($n / 2) + 1;
        echo pow(2, intval($n - 1)) . "\n";
    }
}
 
// Driver Code
$N = 4;
findNthTerm($N);
 
$N = 11;
findNthTerm($N);
 
// This code is contributed
// by Akanksha Rai(Abby_akku)
?>


Output

3
32

Time Complexity: O(log2n), where n represents the given integer.
Auxiliary Space: O(1), no extra space is required, so it is a constant.

Method#2: Using Memoization

Approach

this approach uses memoization technique to store the already calculated values in a dictionary. If the value for nth term is already in the dictionary, the function returns the value from the dictionary. If not, it recursively calculates the nth term using the formula based on whether n is odd or even, stores the result in the dictionary, and returns the result.

Algorithm

1. Define a function to find the nth term in the given series.
2. Create a memo dictionary to store the already calculated values.
3. If the value for nth term is already in memo, return the value from memo.
4. If n is 1 or 2, return 1.
5. If n is odd, recursively call the function with n-1 and divide the result by 2.
6. If n is even, recursively call the function with n/2 and multiply the result by 3.
7. Store the result in memo and return the result.

C++




#include <bits/stdc++.h>
using namespace std;
 
// Function to find the nth term in the given series
int find_nth_term(int n, unordered_map<int, int>& memo) {
    // Check if the value is already present in the memo
    if (memo.count(n)) {
        return memo[n];
    }
    // Base case
    if (n == 1 || n == 2) {
        return 1;
    }
    int result;
    // Recursive case
    if (n % 2 == 1) {
        result = find_nth_term(n - 1, memo) / 2;
    } else {
        result = find_nth_term(n / 2, memo) * 3;
    }
    // Store the result in the memo
    memo[n] = result;
    return result;
}
 
int main() {
    int n = 4;
    unordered_map<int, int> memo;
    cout << "The nth term in the given series is " << find_nth_term(n, memo);
    return 0;
}


Java




import java.util.HashMap;
 
public class Main {
     
    // Function to find the nth term in the given series
    public static int findNthTerm(int n, HashMap<Integer, Integer> memo) {
        // Check if the value is already present in the memo
        if (memo.containsKey(n)) {
            return memo.get(n);
        }
        // Base case
        if (n == 1 || n == 2) {
            return 1;
        }
        int result;
        // Recursive case
        if (n % 2 == 1) {
            result = findNthTerm(n - 1, memo) / 2;
        } else {
            result = findNthTerm(n / 2, memo) * 3;
        }
        // Store the result in the memo
        memo.put(n, result);
        return result;
    }
     
    public static void main(String[] args) {
        int n = 4;
        HashMap<Integer, Integer> memo = new HashMap<>();
        System.out.println("The nth term in the given series is " + findNthTerm(n, memo));
    }
     
}


Python3




def find_nth_term(n, memo):
    if n in memo:
        return memo[n]
    if n == 1 or n == 2:
        return 1
    elif n % 2 == 1:
        result = find_nth_term(n-1, memo) // 2
    else:
        result = find_nth_term(n//2, memo) * 3
    memo[n] = result
    return result
 
n = 4
memo = {}
print("The nth term in the given series is", find_nth_term(n, memo))


C#




// Nikunj Sonigara
 
using System;
using System.Collections.Generic;
 
class Program
{
    // Function to find the nth term in the given series
    static int FindNthTerm(int n, Dictionary<int, int> memo)
    {
        // Check if the value is already present in the memo
        if (memo.ContainsKey(n))
        {
            return memo[n];
        }
         
        // Base case
        if (n == 1 || n == 2)
        {
            return 1;
        }
 
        int result;
 
        // Recursive case
        if (n % 2 == 1)
        {
            result = FindNthTerm(n - 1, memo) / 2;
        }
        else
        {
            result = FindNthTerm(n / 2, memo) * 3;
        }
 
        // Store the result in the memo
        memo[n] = result;
        return result;
    }
 
    static void Main()
    {
        int n = 4;
        Dictionary<int, int> memo = new Dictionary<int, int>();
        Console.WriteLine("The nth term in the given series is " + FindNthTerm(n, memo));
    }
}


Javascript




// Javascript code addition
 
// A function which returns the nth term of a series.
function findNthTerm(n, memo) {
     
    // checking if n is already present in memo
    if (n in memo) {
        return memo[n];
    }
     
    // base conditions, for returning 1 if found n = 1 or n = 2.
    if (n == 1 || n == 2) {
        return 1;
    // checking whether the term is odd, recur for n-1.
    } else if (n % 2 == 1) {
        result = findNthTerm(n - 1, memo) / 2;
    // else if the term is even, recur for n/2.
    } else {
        result = findNthTerm(n / 2, memo) * 3;
    }
     
    // memoizing the code.
    memo[n] = result;
    return result;
}
 
// declaring a variable
let n = 4;
 
// making a dictionary for memoization.
let memo = {};
 
// calling findNthTerm for finding the nth term of a series.
console.log("The nth term in the given series is", findNthTerm(n, memo));
 
// The code is contributed by Nidhi goel.


Output

The nth term in the given series is 3

Time Complexity: O(n)
Auxiliary Space: O(n)



Last Updated : 27 Feb, 2024
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads