Program to find Nth term in the given Series
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:
- All the odd terms in this series form a geometric series.
- 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. |
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) ?> |
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> |
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; } |
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)) |
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. |
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)); } } |
The nth term in the given series is 3
Time Complexity: O(n)
Auxiliary Space: O(n)
Please Login to comment...