Skip to content

Commit c40b18f

Browse files
Merge pull request #62 from wakidurrahman/feat/exercise-03
maxDivide
2 parents 4fd5294 + e3c87b0 commit c40b18f

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

src/exercises/number/modularExponentiation.ts

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,51 @@ function isPrimeNumber(number: number): boolean {
5757

5858
return true;
5959
} // time complexity of O(sqrt(n)) is run n times.
60+
61+
/**
62+
* 3.
63+
*
64+
* Check for a set of prime factors.
65+
*
66+
* The time complexity of maxDivide is a logarithmic function which depends on divisor and the number.
67+
* When testing primes of 2, 3, and 5, the logarithmic of 2 (log2 (n)) yields the highest time complexity.
68+
*/
69+
70+
function maxDivide(number: number, divisor: number): number {
71+
while (number % divisor == 0) {
72+
number /= divisor;
73+
}
74+
return number;
75+
} // Time Complexity for maxDivide(number, divisor): O(logdivisor(number))
76+
77+
function isUgly(number: number): boolean {
78+
number = maxDivide(number, 2);
79+
number = maxDivide(number, 3);
80+
number = maxDivide(number, 5);
81+
82+
return number === 1;
83+
} // Time Complexity for isUgly: O(log2(n))
84+
85+
/**
86+
* Iterate this over n, and now the list of ugly numbers can be returned.
87+
* @param n
88+
* @returns
89+
*
90+
* The isUgly function is limited by the time complexity of maxDivide(number, 2).
91+
* Hence, arrayNUglyNumbers has n times that time complexity.
92+
*/
93+
94+
function arrayNUglyNumbers(n: number): number[] {
95+
let counter: number = 0;
96+
let currentNumber: number = 1;
97+
let uglyNumbers: number[] = [];
98+
99+
while (counter != n) {
100+
if (isUgly(currentNumber)) {
101+
counter++;
102+
uglyNumbers.push(currentNumber);
103+
}
104+
currentNumber++;
105+
}
106+
return uglyNumbers;
107+
} // Time Complexity for arrayNUglyNumbers: O(n(log2(n)))

0 commit comments

Comments
 (0)