# Find n-th element in a series with only 2 digits (4 and 7) allowed | Set 2 (log(n) method)

Consider a series of numbers composed of only digits 4 and 7. First few numbers in the series are 4, 7, 44, 47, 74, 77, 444, .. etc. Given a number n, we need to find n-th number in the series.

Examples:

```Input : n = 2
Output : 7

Input : n = 3
Output : 44

Input  : n = 5
Output : 74

Input  : n = 6
Output : 77
```

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

We have discussed a O(n) solution in below post.
Find n-th element in a series with only 2 digits (4 and 7) allowed

In this post, a O(log n) solution is discussed which is based on below pattern in numbers. The numbers can be seen

```                 ""
/      \
4         7
/   \     /   \
44    47   74    77
/ \   / \   / \  / \
```

The idea is to fill the required number from end. We know can observe that the last digit is 4 if n is odd and last digit is 7 if n is even. After filling last digit, we move to parent node in tree. If n is odd, then parent node corresponds to (n-1/2. Else parent node corresponds to (n-2)/2.

## C++

 `// C++ program to find n-th number containing ` `// only 4 and 7. ` `#include ` `using` `namespace` `std; ` ` `  `string findNthNo(``int` `n) ` `{ ` `    ``string res = ``""``; ` `    ``while` `(n >= 1) ` `    ``{ ` `        ``// If n is odd, append 4 and  ` `        ``// move to parent  ` `        ``if` `(n & 1) ` `        ``{ ` `            ``res = res + ``"4"``; ` `            ``n = (n-1)/2;         ` `        ``} ` ` `  `        ``// If n is even, append 7 and  ` `        ``// move to parent  ` `        ``else` `        ``{ ` `            ``res = res + ``"7"``; ` `            ``n = (n-2)/2;       ` `        ``} ` `    ``} ` ` `  `   ``// Reverse res and return. ` `   ``reverse(res.begin(), res.end()); ` `   ``return` `res; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `n = 13; ` `    ``cout << findNthNo(n); ` `    ``return` `0; ` `} `

## Java

 `// java program to find n-th number  ` `// containing only 4 and 7. ` `public` `class` `GFG { ` `     `  `    ``static` `String findNthNo(``int` `n) ` `    ``{ ` `        ``String res = ``""``; ` `        ``while` `(n >= ``1``) ` `        ``{ ` `             `  `            ``// If n is odd, append  ` `            ``// 4 and move to parent  ` `            ``if` `((n & ``1``) == ``1``) ` `            ``{ ` `                ``res = res + ``"4"``; ` `                ``n = (n - ``1``) / ``2``;      ` `            ``} ` `     `  `            ``// If n is even, append  ` `            ``// 7 and move to parent  ` `            ``else` `            ``{ ` `                ``res = res + ``"7"``; ` `                ``n = (n - ``2``) / ``2``;      ` `            ``} ` `        ``} ` `     `  `        ``// Reverse res and return. ` `        ``StringBuilder sb =  ` `            ``new` `StringBuilder(res);  ` `        ``sb.reverse();  ` `        ``return` `new` `String(sb); ` `    ``} ` `     `  `    ``// Driver code ` `    ``public` `static` `void` `main(String args[]) ` `    ``{ ` `        ``int` `n = ``13``; ` `     `  `        ``System.out.print( findNthNo(n) ); ` `    ``} ` `} ` ` `  `// This code is contributed by Sam007 `

## Python3

 `# Python3 program to find ` `# n-th number containing ` `# only 4 and 7. ` `def` `reverse(s): ` `    ``if` `len``(s) ``=``=` `0``: ` `        ``return` `s ` `    ``else``: ` `        ``return` `reverse(s[``1``:]) ``+` `s[``0``] ` `         `  `def` `findNthNo(n): ` `    ``res ``=` `""; ` `    ``while` `(n >``=` `1``): ` `         `  `        ``# If n is odd, append ` `        ``# 4 and move to parent ` `        ``if` `(n & ``1``): ` `            ``res ``=` `res ``+` `"4"``; ` `            ``n ``=` `(``int``)((n ``-` `1``) ``/` `2``); ` `             `  `            ``# If n is even, append7 ` `            ``# and move to parent ` `        ``else``: ` `            ``res ``=` `res ``+` `"7"``; ` `            ``n ``=` `(``int``)((n ``-` `2``) ``/` `2``); ` `             `  `    ``# Reverse res ` `    ``# and return. ` `    ``return` `reverse(res); ` ` `  `# Driver code ` `n ``=` `13``; ` `print``(findNthNo(n)); ` ` `  `# This code is contributed ` `# by mits `

## C#

 `// C# program to find n-th number  ` `// containing only 4 and 7. ` `using` `System; ` `class` `GFG { ` ` `  `static` `string` `findNthNo(``int` `n) ` `{ ` `    ``string` `res = ``""``; ` `    ``while` `(n >= 1) ` `    ``{ ` `         `  `        ``// If n is odd, append 4 and  ` `        ``// move to parent  ` `        ``if` `((n & 1) == 1) ` `        ``{ ` `            ``res = res + ``"4"``; ` `            ``n = (n - 1) / 2;      ` `        ``} ` ` `  `        ``// If n is even, append 7 and  ` `        ``// move to parent  ` `        ``else` `        ``{ ` `            ``res = res + ``"7"``; ` `            ``n = (n - 2) / 2;      ` `        ``} ` `    ``} ` ` `  `    ``// Reverse res and return. ` `    ``char``[] arr = res.ToCharArray(); ` `    ``Array.Reverse(arr); ` `    ``return` `new` `string``(arr); ` ` `  `} ` ` `  `// Driver Code ` `public` `static` `void` `Main() ` `{ ` `        ``int` `n = 13; ` `        ``Console.Write( findNthNo(n) ); ` `} ` `} ` ` `  `// This code is contributed by Sam007 `

## PHP

 `= 1) ` `    ``{ ` `        ``// If n is odd, append  ` `        ``// 4 and move to parent  ` `        ``if` `(``\$n` `& 1) ` `        ``{ ` `            ``\$res` `= ``\$res` `. ``"4"``; ` `            ``\$n` `= (int)((``\$n` `- 1) / 2);  ` `        ``} ` ` `  `        ``// If n is even, append  ` `        ``// 7 and move to parent  ` `        ``else` `        ``{ ` `            ``\$res` `= ``\$res` `. ``"7"``; ` `            ``\$n` `= (int)((``\$n` `- 2) / 2);  ` `        ``} ` `    ``} ` `     `  `// Reverse res  ` `// and return. ` `return` `strrev``(``\$res``); ` `} ` ` `  `// Driver code ` `\$n` `= 13; ` `echo` `findNthNo(``\$n``); ` ` `  `// This code is contributed ` `// by mits ` `?> `

Output:

```774
```

In this code the total complexity is O(log n). Because while loop run log (n) times.

This article is contributed by Devanshu Agarwal. 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.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up

Improved By : Sam007, Mithun Kumar

Article Tags :
Practice Tags :

2

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