# Check if the n-th term is odd or even in a Fibonacci like sequence

Consider a sequence a0, a1, …, an, where ai = ai-1 + ai-2. Given a0, a1 and a positive integer n. The task is to find whether an is odd or even.

Note that the given sequence is like Fibonacci with the difference that first two terms can be anything instead of 0 or 1.

Examples :

```Input : a0 = 2, a1 = 4, n =3
Output : Even
a2 = 6, a3 = 10
And a3 is even.

Input : a0 = 1, a1 = 9, n = 2
Output : Even
```

Method 1 : The idea is to find the sequence using the array and check if nth element is even or odd.

## C++

 `// CPP Program to check if the nth is odd or even in a ` `// sequence where each term is sum of previous two term ` `#include ` `using` `namespace` `std; ` `#define MAX 100 ` ` `  `// Return if the nth term is even or odd. ` `bool` `findNature(``int` `a, ``int` `b, ``int` `n) ` `{ ` `    ``int` `seq[MAX] = { 0 }; ` ` `  `    ``seq = a; ` `    ``seq = b; ` ` `  `    ``for` `(``int` `i = 2; i <= n; i++) ` `        ``seq[i] = seq[i - 1] + seq[i - 2]; ` ` `  `    ``// Return true if odd ` `    ``return` `(seq[n] & 1); ` `} ` ` `  `// Driven Program ` `int` `main() ` `{ ` `    ``int` `a = 2, b = 4; ` `    ``int` `n = 3; ` ` `  `    ``(findNature(a, b, n) ? (cout << ``"Odd"` `                                 ``<< ``" "``) ` `                         ``: (cout << ``"Even"` `                                 ``<< ``" "``)); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java Program to check if  ` `// the nth is odd or even  ` `// in a sequence where each  ` `// term is sum of previous ` `// two term ` ` `  `// Return if the nth  ` `// term is even or odd. ` `class` `GFG ` `{ ` `public` `static` `int` `findNature(``int` `a,  ` `                             ``int` `b, ``int` `n) ` `{ ` `    ``int``[] seq = ``new` `int``[``100``]; ` ` `  `    ``seq[``0``] = a; ` `    ``seq[``1``] = b; ` ` `  `    ``for` `(``int` `i = ``2``; i <= n; i++) ` `        ``seq[i] = seq[i - ``1``] + seq[i - ``2``]; ` ` `  `    ``// Return true if odd ` `    ``if``((seq[n] & ``1``) != ``0``) ` `    ``return` `1``; ` `    ``else` `    ``return` `0``; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``int` `a = ``2``, b = ``4``; ` `    ``int` `n = ``3``; ` `    ``if``(findNature(a, b, n) == ``1``) ` `    ``System.out.println(``"Odd "``); ` `    ``else` `    ``System.out.println(``"Even "``); ` `} ` `} ` ` `  `// This code is contributed ` `// by mits `

## Python3

 `# Python3 Program to check if ` `# the nth is odd or even in a ` `# sequence where each term is  ` `# sum of previous two term ` `MAX` `=` `100``; ` ` `  `# Return if the nth  ` `# term is even or odd. ` `def` `findNature(a, b, n): ` `    ``seq ``=` `[``0``] ``*` `MAX``; ` `    ``seq[``0``] ``=` `a; ` `    ``seq[``1``] ``=` `b; ` ` `  `    ``for` `i ``in` `range``(``2``, n ``+` `1``): ` `        ``seq[i] ``=` `seq[i ``-` `1``] ``+` `seq[i ``-` `2``]; ` ` `  `    ``# Return true if odd ` `    ``return` `(seq[n] & ``1``); ` ` `  `# Driver Code ` `a ``=` `2``; ` `b ``=` `4``; ` `n ``=` `3``; ` ` `  `if``(findNature(a, b, n)): ` `    ``print``(``"Odd"``); ` `else``: ` `    ``print``(``"Even"``); ` ` `  `# This code is contributed by mits `

## C#

 `// C# Program to check if the  ` `// nth is odd or even in a ` `// sequence where each term  ` `// is sum of previous two term ` `using` `System; ` ` `  `// Return if the nth term ` `// is even or odd. ` `class` `GFG ` `{ ` `public` `static` `int` `findNature(``int` `a,  ` `                             ``int` `b, ``int` `n) ` `{ ` `    ``int``[] seq = ``new` `int``; ` ` `  `    ``seq = a; ` `    ``seq = b; ` ` `  `    ``for` `(``int` `i = 2; i <= n; i++) ` `        ``seq[i] = seq[i - 1] +  ` `                 ``seq[i - 2]; ` ` `  `    ``// Return true if odd ` `    ``if``((seq[n] & 1)!=0) ` `    ``return` `1; ` `    ``else` `    ``return` `0; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `Main() ` `{ ` `    ``int` `a = 2, b = 4; ` `    ``int` `n = 3; ` `    ``if``(findNature(a, b, n) == 1) ` `    ``Console.Write(``"Odd "``); ` `    ``else` `    ``Console.Write(``"Even "``); ` `} ` `} ` ` `  `// This code is contributed ` `// by mits `

## PHP

 ` `

Output:

```Even
```

Method 2 (efficient) :
Observe, the nature (odd or even) of the nth term depends on the previous terms and nature of the previous term are depends on their previous terms and finally depends on the initial value i.e a0 and a1.
So, we have four possible scenarios for a0 and a1:
Case 1: When a0 an a1 is even
In this case each of the value in the sequence will be even only.

Case 2: When a0 an a1 is odd
In this case, observe a2 is even, a3 is odd, a4 is odd and so on. So, we can say ai is even if i is of the form 3*k – 1, else odd.

Case 3: When a0 is even and a1 is odd
In this case, observe a2 is odd, a3 is even, a4 and a5 is odd, a6 is even and so on. So, we can say, ai is even if i is multiple of 3, else odd

Case 4: When a0 is odd and a1 is even
In this case, observe a2 and a3 is odd, a4 is even, a5 and a6 is odd, a7 is even and so on. So, we can say, ai is even if i is of the form 3*k + 1, k >= 0, else odd.

Below is implementation of this approach:

## C++

 `// CPP Program to check if the nth is odd or even in a ` `// sequence where each term is sum of previous two term ` `#include ` `using` `namespace` `std; ` ` `  `// Return if the nth term is even or odd. ` `bool` `findNature(``int` `a, ``int` `b, ``int` `n) ` `{ ` `    ``if` `(n == 0) ` `        ``return` `(a & 1); ` ` `  `    ``if` `(n == 1) ` `        ``return` `(b & 1); ` ` `  `    ``// If a is even ` `    ``if` `(!(a & 1)) { ` ` `  `        ``// If b is even ` `        ``if` `(!(b & 1))  ` `            ``return` `false``; ` `         `  `        ``// If b is odd ` `        ``else`  `            ``return` `(n % 3 != 0); ` `    ``} ` ` `  `    ``// If a is odd ` `    ``else` `{ ` `        ``// If b is odd ` `        ``if` `(!(b & 1))  ` `            ``return` `((n - 1) % 3 != 0); ` ` `  `        ``// If b is eve ` `        ``else`  `            ``return` `((n + 1) % 3 != 0); ` `    ``} ` `} ` ` `  `// Driven Program ` `int` `main() ` `{ ` `    ``int` `a = 2, b = 4; ` `    ``int` `n = 3; ` ` `  `    ``(findNature(a, b, n) ? (cout << ``"Odd"` `                                 ``<< ``" "``) ` `                         ``: (cout << ``"Even"` `                                 ``<< ``" "``)); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java Program to check if the nth is odd or even in a ` `// sequence where each term is sum of previous two term ` ` `  `class` `GFG{ ` `// Return if the nth term is even or odd. ` `static` `boolean` `findNature(``int` `a, ``int` `b, ``int` `n) ` `{ ` `    ``if` `(n == ``0``) ` `        ``return` `(a & ``1``)==``1``?``true``:``false``; ` ` `  `    ``if` `(n == ``1``) ` `        ``return` `(b & ``1``)==``1``?``true``:``false``; ` ` `  `    ``// If a is even ` `    ``if` `((a & ``1``)==``0``) { ` ` `  `        ``// If b is even ` `        ``if` `((b & ``1``)==``0``)  ` `            ``return` `false``; ` `         `  `        ``// If b is odd ` `        ``else` `            ``return` `(n % ``3` `!= ``0``); ` `    ``} ` ` `  `    ``// If a is odd ` `    ``else` `{ ` `        ``// If b is odd ` `        ``if` `((b & ``1``)==``0``)  ` `            ``return` `((n - ``1``) % ``3` `!= ``0``); ` ` `  `        ``// If b is eve ` `        ``else` `            ``return` `((n + ``1``) % ``3` `!= ``0``); ` `    ``} ` `} ` ` `  `// Driven Program ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``int` `a = ``2``, b = ``4``; ` `    ``int` `n = ``3``; ` ` `  `    ``if``(findNature(a, b, n)) ` `    ``System.out.println(``"Odd"``); ` `    ``else` `    ``System.out.println(``"Even"``); ` ` `  `} ` `} ` `// This Code is contributed by mits `

## Python3

 `# Python3 Program to check if the  ` `# nth is odd or even in a ` `# sequence where each term is  ` `# sum of previous two term ` ` `  `# Return if the nth  ` `# term is even or odd. ` `def` `findNature(a, b, n): ` `    ``if` `(n ``=``=` `0``): ` `        ``return` `(a & ``1``); ` ` `  `    ``if` `(n ``=``=` `1``): ` `        ``return` `(b & ``1``); ` ` `  `    ``# If a is even ` `    ``if` `((a & ``1``) ``=``=` `0``):  ` ` `  `        ``# If b is even ` `        ``if` `((b & ``1``) ``=``=` `0``):  ` `            ``return` `False``; ` `         `  `        ``# If b is odd ` `        ``else``: ` `            ``return` `True` `if``(n ``%` `3` `!``=` `0``) ``else` `False``; ` ` `  `    ``# If a is odd ` `    ``else``: ` `        ``# If b is odd ` `        ``if` `((b & ``1``) ``=``=` `0``):  ` `            ``return` `True` `if``((n ``-` `1``) ``%` `3` `!``=` `0``) ``else` `False``; ` ` `  `        ``# If b is eve ` `        ``else``: ` `            ``return` `True` `if``((n ``+` `1``) ``%` `3` `!``=` `0``) ``else` `False``; ` ` `  `# Driver Code ` `a ``=` `2``;  ` `b ``=` `4``; ` `n ``=` `3``; ` ` `  `if` `(findNature(a, b, n) ``=``=` `True``): ` `    ``print``(``"Odd"``, end ``=` `" "``); ` `else``: ` `    ``print``(``"Even"``, end ``=` `" "``); ` `     `  `# This code is contributed by mits `

## C#

 `// C# Program to check if the nth is odd or even in a ` `// sequence where each term is sum of previous two term ` ` `  `class` `GFG{ ` `// Return if the nth term is even or odd. ` `static` `bool` `findNature(``int` `a, ``int` `b, ``int` `n) ` `{ ` `    ``if` `(n == 0) ` `        ``return` `(a & 1)==1?``true``:``false``; ` ` `  `    ``if` `(n == 1) ` `        ``return` `(b & 1)==1?``true``:``false``; ` ` `  `    ``// If a is even ` `    ``if` `((a & 1)==0) { ` ` `  `        ``// If b is even ` `        ``if` `((b & 1)==0)  ` `            ``return` `false``; ` `         `  `        ``// If b is odd ` `        ``else` `            ``return` `(n % 3 != 0); ` `    ``} ` ` `  `    ``// If a is odd ` `    ``else` `{ ` `        ``// If b is odd ` `        ``if` `((b & 1)==0)  ` `            ``return` `((n - 1) % 3 != 0); ` ` `  `        ``// If b is eve ` `        ``else` `            ``return` `((n + 1) % 3 != 0); ` `    ``} ` `} ` ` `  `// Driven Program ` `static` `void` `Main() ` `{ ` `    ``int` `a = 2, b = 4; ` `    ``int` `n = 3; ` ` `  `    ``if``(findNature(a, b, n)) ` `    ``System.Console.WriteLine(``"Odd"``); ` `    ``else` `    ``System.Console.WriteLine(``"Even"``); ` ` `  `} ` `} ` `// This Code is contributed by mits `

## PHP

 ` `

Output :

```Even
```

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : jit_t, Mithun Kumar

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.