Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions DIRECTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,7 @@
* [Problem017](Project-Euler/Problem017.js)
* [Problem018](Project-Euler/Problem018.js)
* [Problem020](Project-Euler/Problem020.js)
* [Problem021](Project-Euler/Problem021.js)
* [Problem023](Project-Euler/Problem023.js)
* [Problem025](Project-Euler/Problem025.js)
* [Problem028](Project-Euler/Problem028.js)
Expand Down
35 changes: 35 additions & 0 deletions Project-Euler/Problem021.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/**
* Amicable numbers
*
* P.S.(Project Euler - 021):
* Let d(n) be defined as the sum of proper divisors of n (numbers less than n which divide evenly into n).
* If d(a) = b and d(b) = a, where a ≠ b, then a and b are an amicable pair and each of a and b are called amicable numbers.
*
* For example, the proper divisors of 220 are 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 and 110;
* therefore d(220) = 284. The proper divisors of 284 are 1, 2, 4, 71 and 142; so d(284) = 220.
*
* Evaluate the sum of all the amicable numbers under 10000.
*
* @param {Number} maxNum
* @returns {Number} Sum of all amicable numbers under maxNum
*/
export const sumAmicableNums = (maxNum) => {
const amicNums = []

for (let i = 1; i < maxNum; i++) {
const left = d(i)
const right = d(left)
if (i === right && i !== left && amicNums.indexOf(i) === -1) {
amicNums.push(i, left)
}
}
return amicNums.reduce((a, b) => a + b, 0)
}

const d = (num) => {
const output = []
for (let i = 1; i < num; i++) {
if (num % i === 0) { output.push(i) }
}
return output.reduce((a, b) => a + b, 0)
}
8 changes: 8 additions & 0 deletions Project-Euler/test/Problem021.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { sumAmicableNums } from '../Problem021.js'

describe('Amicable numbers', () => {
// Project Euler Condition Check
test('if the limit is 10000', () => {
expect(sumAmicableNums(10000)).toBe(31626)
})
})