Skip to content

Commit 79dcd3d

Browse files
authored
Merge pull request #3935 from Ishitamukherjee2004/new-branch
Solution of Magic Number from gfg is added
2 parents cf04dc8 + 716f39e commit 79dcd3d

File tree

1 file changed

+202
-0
lines changed

1 file changed

+202
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
---
2+
id: magic-number
3+
title: Magic Number
4+
sidebar_label: Magic-Number
5+
tags:
6+
- Easy
7+
- Dynamic Programming
8+
- Math
9+
description: "This tutorial covers the solution to the Magic Number problem from the GeeksforGeeks."
10+
---
11+
## Problem Description
12+
A magic number is defined as a number that 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)`, …
13+
Given the value of `n`, find the `n`'th Magic number modulo `109+7`.
14+
15+
## Examples
16+
17+
**Example 1:**
18+
19+
```
20+
Input: n = 1
21+
Output: 5
22+
Explanation: 1'st Magic number is 5.
23+
```
24+
25+
**Example 2:**
26+
27+
```
28+
Input: n = 2
29+
Output: 25
30+
Explanation: 2'nd Magic number is 25.
31+
```
32+
33+
## Your Task
34+
35+
You don't need to read input or print anything. Your task is to complete the function `nthMagicNo()` which takes n input and returns the answer with modulo `10^9+7`.
36+
37+
Expected Time Complexity: $O(log(n))$
38+
39+
Expected Auxiliary Space: $O(1)$ for iterative approach.
40+
41+
## Constraints
42+
43+
* `1 ≤ n ≤ 10^5`
44+
45+
## Problem Explanation
46+
A magic number is defined as a number that 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)`, …
47+
Given the value of `n`, find the `n`'th Magic number modulo `109+7`.
48+
49+
## Code Implementation
50+
51+
<Tabs>
52+
<TabItem value="Python" label="Python" default>
53+
<SolutionAuthor name="@Ishitamukherjee2004"/>
54+
55+
```py
56+
def get_nth_magic_number(n):
57+
magic_numbers = []
58+
power = 0
59+
while len(magic_numbers) < n:
60+
num = 5 ** power
61+
magic_numbers.append(num)
62+
for i in range(len(magic_numbers) - 1):
63+
magic_numbers.append(num + magic_numbers[i])
64+
power += 1
65+
return magic_numbers[n - 1] % (10**9 + 7)
66+
67+
n = int(input("Enter the value of N: "))
68+
print("The {}th magic number is: {}".format(n, get_nth_magic_number(n)))
69+
70+
71+
```
72+
73+
</TabItem>
74+
<TabItem value="C++" label="C++">
75+
<SolutionAuthor name="@Ishitamukherjee2004"/>
76+
77+
```cpp
78+
#include <iostream>
79+
#include <vector>
80+
81+
const int MOD = 1e9 + 7;
82+
83+
int getNthMagicNumber(int n) {
84+
std::vector<int> magicNumbers;
85+
int power = 0;
86+
while (magicNumbers.size() < n) {
87+
int num = pow(5, power);
88+
magicNumbers.push_back(num);
89+
for (int i = 0; i < magicNumbers.size() - 1; i++) {
90+
magicNumbers.push_back(num + magicNumbers[i]);
91+
}
92+
power++;
93+
}
94+
return magicNumbers[n - 1] % MOD;
95+
}
96+
int main() {
97+
int n;
98+
std::cout << "Enter the value of N: ";
99+
std::cin >> n;
100+
std::cout << "The " << n << "th magic number is: " << getNthMagicNumber(n) << std::endl;
101+
return 0;
102+
}
103+
104+
105+
```
106+
107+
</TabItem>
108+
109+
<TabItem value="Javascript" label="Javascript" default>
110+
<SolutionAuthor name="@Ishitamukherjee2004"/>
111+
112+
```javascript
113+
function getNthMagicNumber(n) {
114+
let magicNumbers = [];
115+
let power = 0;
116+
while (magicNumbers.length < n) {
117+
let num = Math.pow(5, power);
118+
magicNumbers.push(num);
119+
for (let i = 0; i < magicNumbers.length - 1; i++) {
120+
magicNumbers.push(num + magicNumbers[i]);
121+
}
122+
power++;
123+
}
124+
return magicNumbers[n - 1] % (10**9 + 7);
125+
}
126+
127+
let n = parseInt(prompt("Enter the value of N:"));
128+
alert("The " + n + "th magic number is: " + getNthMagicNumber(n));
129+
130+
131+
```
132+
133+
</TabItem>
134+
135+
<TabItem value="Typescript" label="Typescript" default>
136+
<SolutionAuthor name="@Ishitamukherjee2004"/>
137+
138+
```typescript
139+
function getNthMagicNumber(n: number): number {
140+
let magicNumbers: number[] = [];
141+
let power: number = 0;
142+
while (magicNumbers.length < n) {
143+
let num: number = Math.pow(5, power);
144+
magicNumbers.push(num);
145+
for (let i: number = 0; i < magicNumbers.length - 1; i++) {
146+
magicNumbers.push(num + magicNumbers[i]);
147+
}
148+
power++;
149+
}
150+
return magicNumbers[n - 1] % (10**9 + 7);
151+
}
152+
153+
let n: number = parseInt(prompt("Enter the value of N:"));
154+
alert("The " + n + "th magic number is: " + getNthMagicNumber(n));
155+
156+
```
157+
158+
</TabItem>
159+
160+
<TabItem value="Java" label="Java" default>
161+
<SolutionAuthor name="@Ishitamukherjee2004"/>
162+
163+
```java
164+
165+
import java.util.*;
166+
167+
public class Main {
168+
public static int getNthMagicNumber(int n) {
169+
List<Integer> magicNumbers = new ArrayList<>();
170+
int power = 0;
171+
while (magicNumbers.size() < n) {
172+
int num = (int) Math.pow(5, power);
173+
magicNumbers.add(num);
174+
for (int i = 0; i < magicNumbers.size() - 1; i++) {
175+
magicNumbers.add(num + magicNumbers.get(i));
176+
}
177+
power++;
178+
}
179+
return magicNumbers.get(n - 1) % (int) (1e9 + 7);
180+
}
181+
public static void main(String[] args) {
182+
Scanner scanner = new Scanner(System.in);
183+
System.out.print("Enter the value of N: ");
184+
int n = scanner.nextInt();
185+
System.out.println("The " + n + "th magic number is: " + getNthMagicNumber(n));
186+
}
187+
}
188+
189+
190+
```
191+
192+
</TabItem>
193+
</Tabs>
194+
195+
196+
## Time Complexity
197+
198+
* The iterative approach has a time complexity of $O(n log n)$.
199+
200+
## Space Complexity
201+
202+
* The space complexity is $O(n)$ since we are using only a fixed amount of extra space.

0 commit comments

Comments
 (0)