# 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 : 4Output : 3Input :  11Output : 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 ``#include ` `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

 ``

## PHP

 ``

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.

#### 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 ``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 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 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)

Previous
Next