Skip to content
Open
Show file tree
Hide file tree
Changes from 12 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
8 changes: 7 additions & 1 deletion DIRECTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* [AllCombinationsOfSizeK](Backtracking/AllCombinationsOfSizeK.js)
* [GeneratePermutations](Backtracking/GeneratePermutations.js)
* [KnightTour](Backtracking/KnightTour.js)
* [NQueen](Backtracking/NQueen.js)
* [NQueens](Backtracking/NQueens.js)
* [RatInAMaze](Backtracking/RatInAMaze.js)
* [Sudoku](Backtracking/Sudoku.js)
* [SumOfSubset](Backtracking/SumOfSubset.js)
Expand Down Expand Up @@ -149,6 +149,7 @@
* [CollatzSequence](Maths/CollatzSequence.js)
* [Coordinate](Maths/Coordinate.js)
* [CoPrimeCheck](Maths/CoPrimeCheck.js)
* [CountNumbersDivisible](Maths/CountNumbersDivisible.js)
* [DecimalExpansion](Maths/DecimalExpansion.js)
* [DecimalIsolate](Maths/DecimalIsolate.js)
* [DegreeToRadian](Maths/DegreeToRadian.js)
Expand All @@ -172,6 +173,7 @@
* [IsDivisible](Maths/IsDivisible.js)
* [IsEven](Maths/IsEven.js)
* [IsOdd](Maths/IsOdd.js)
* [isPalindromeIntegerNumber](Maths/isPalindromeIntegerNumber.js)
* [IsPronic](Maths/IsPronic.js)
* [IsSquareFree](Maths/IsSquareFree.js)
* [JugglerSequence](Maths/JugglerSequence.js)
Expand Down Expand Up @@ -227,6 +229,7 @@
* [Problem008](Project-Euler/Problem008.js)
* [Problem009](Project-Euler/Problem009.js)
* [Problem010](Project-Euler/Problem010.js)
* [Problem011](Project-Euler/Problem011.js)
* [Problem012](Project-Euler/Problem012.js)
* [Problem013](Project-Euler/Problem013.js)
* [Problem014](Project-Euler/Problem014.js)
Expand All @@ -235,8 +238,10 @@
* [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)
* [Problem044](Project-Euler/Problem044.js)
* **Recursive**
* [BinaryEquivalent](Recursive/BinaryEquivalent.js)
* [BinarySearch](Recursive/BinarySearch.js)
Expand Down Expand Up @@ -290,6 +295,7 @@
* [ShellSort](Sorts/ShellSort.js)
* [SimplifiedWiggleSort](Sorts/SimplifiedWiggleSort.js)
* [StoogeSort](Sorts/StoogeSort.js)
* [SwapSort](Sorts/SwapSort.js)
* [TimSort](Sorts/TimSort.js)
* [TopologicalSort](Sorts/TopologicalSort.js)
* **String**
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)
})
})