|
|
@@ -0,0 +1,42 @@
|
|
|
+// 1390. Four Divisors
|
|
|
+
|
|
|
+
|
|
|
+function sumFourDivisors(nums: number[]): number {
|
|
|
+ let divisorsCache = new Map<number, number[]>()
|
|
|
+ function divisors(num: number): number[] {
|
|
|
+ if ( divisorsCache.has(num) ) { return divisorsCache.get(num) }
|
|
|
+ let ret: number[] = [1, num]
|
|
|
+ const limit: number = num-1
|
|
|
+ for ( let i = 2 ; i < limit; ++i ) {
|
|
|
+ if ( num % i == 0 ) {
|
|
|
+ ret.push(i);
|
|
|
+ if ( ret.length > 4 ) { break; }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ divisorsCache.set(num, ret);
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+ let ret: number = 0;
|
|
|
+ let nums_size = nums.length;
|
|
|
+ for ( let i = 0; i < nums_size; ++i ) {
|
|
|
+ const divs: number[] = divisors(nums[i]);
|
|
|
+ if ( divs.length == 4 ) {
|
|
|
+ ret += divs[0] + divs[1] + divs[2] + divs[3];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return ret;
|
|
|
+};
|
|
|
+
|
|
|
+function main() {
|
|
|
+ function r(nums: number[], exp: number) {
|
|
|
+ console.log(`sumFourDivisors([${nums}]) = ${sumFourDivisors(nums)} | exp: ${exp}`)
|
|
|
+ }
|
|
|
+
|
|
|
+ r([21,4,7], 32)
|
|
|
+ r([21,21], 64)
|
|
|
+ r([1,2,3,4,5], 0)
|
|
|
+ r([1,2,3,4,5,6,7,8,9,10], 45)
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+main()
|