@@ -57,3 +57,51 @@ function isPrimeNumber(number: number): boolean {
57
57
58
58
return true ;
59
59
} // 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