A magic number is defined as a number which can be expressed as a power of 5 or sum of unique powers of 5. First few magic numbers are 5, 25, 30(5 + 25), 125, 130(125 + 5), ....
Write a function to find the nth Magic number.
Example:
Input: n = 2 Output: 25 Input: n = 5 Output: 130
If we notice carefully the magic numbers can be represented as 001, 010, 011, 100, 101, 110 etc, where 001 is 0*pow(5,3) + 0*pow(5,2) + 1*pow(5,1). So basically we need to add powers of 5 for each bit set in a given integer n.
Below is the implementation based on this idea.
Approach :
Step 1 : declare and assign a number for which you want to find the magic number.
Step 2 : assign a pow = 1, and ans = 0
Step 3 : use while loop to iterate each bit until ends (while n > 0)
Step 4 : inside loop, find last bit using & operation and keep updating answer and power as well
Step 5 : Once loop exit return answer
// C++ program to find nth magic number
#include <bits/stdc++.h>
using namespace std;
// Function to find nth magic number
int nthMagicNo(int n)
{
int pow = 1, answer = 0;
// Go through every bit of n
while (n)
{
pow = pow*5;
// If last bit of n is set
if (n & 1)
answer += pow;
// proceed to next bit
n >>= 1; // or n = n/2
}
return answer;
}
// Driver program to test above function
int main()
{
int n = 5;
cout << "nth magic number is " << nthMagicNo(n) << endl;
return 0;
}
// Java program to find nth
// magic number
import java.io.*;
class GFG
{
// Function to find nth magic number
static int nthMagicNo(int n)
{
int pow = 1, answer = 0;
// Go through every bit of n
while (n != 0)
{
pow = pow*5;
// If last bit of n is set
if ((int)(n & 1) == 1)
answer += pow;
// proceed to next bit
// or n = n/2
n >>= 1;
}
return answer;
}
// Driver program to test
// above function
public static void main(String[] args)
{
int n = 5;
System.out.println("nth magic" +
" number is " + nthMagicNo(n));
}
}
// This code is contributed by
// prerna saini
# Python program to find nth magic number
# Function to find nth magic number
def nthMagicNo(n):
pow = 1
answer = 0
# Go through every bit of n
while (n):
pow = pow*5
# If last bit of n is set
if (n & 1):
answer += pow
# proceed to next bit
n >>= 1 # or n = n/2
return answer
# Driver program to test above function
n = 5
print("nth magic number is", nthMagicNo(n))
# This code is contributed by
# Smitha Dinesh Semwal
// C# program to find nth
// magic number
using System;
public class GFG
{
// Function to find nth magic number
static int nthMagicNo(int n)
{
int pow = 1, answer = 0;
// Go through every bit of n
while (n != 0)
{
pow = pow * 5;
// If last bit of n is set
if ((int)(n & 1) == 1)
answer += pow;
// proceed to next bit
// or n = n/2
n >>= 1;
}
return answer;
}
// Driver Code
public static void Main()
{
int n = 5;
Console.WriteLine("nth magic" + " number is "
+ nthMagicNo(n));
}
}
// This code is contributed by Sam007
<?php
// PHP program to find nth
// magic number
// Function to find nth
// magic number
function nthMagicNo($n)
{
$pow = 1;
$answer = 0;
// Go through every bit of n
while ($n)
{
$pow = $pow * 5;
// If last bit of n is set
if ($n & 1)
$answer += $pow;
// proceed to next bit
$n >>= 1; // or $n = $n/2
}
return $answer;
}
// Driver Code
$n = 5;
echo "nth magic number is ",
nthMagicNo($n), "\n";
// This code is contributed by Ajit.
?>
<script>
// Javascript program to find nth
// magic number
// Function to find nth magic number
function nthMagicNo(n)
{
let pow = 1, answer = 0;
// Go through every bit of n
while (n != 0)
{
pow = pow * 5;
// If last bit of n is set
if ((n & 1) == 1)
answer += pow;
// proceed to next bit
// or n = n/2
n >>= 1;
}
return answer;
}
let n = 5;
document.write("nth magic" + " number is " + nthMagicNo(n));
</script>
Output :
nth magic number is 130
Complexity :
Time complexity : O(logN)
Auxiliary Space : O(1)
Thanks to manrajsingh for suggesting the above solution.