mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-04 15:39:42 +08:00

* chore: Switch to Node 20 + Vitest * chore: migrate to vitest mock functions * chore: code style (switch to prettier) * test: re-enable long-running test Seems the switch to Node 20 and Vitest has vastly improved the code's and / or the test's runtime! see #1193 * chore: code style * chore: fix failing tests * Updated Documentation in README.md * Update contribution guidelines to state usage of Prettier * fix: set prettier printWidth back to 80 * chore: apply updated code style automatically * fix: set prettier line endings to lf again * chore: apply updated code style automatically --------- Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Co-authored-by: Lars Müller <34514239+appgurueu@users.noreply.github.com>
34 lines
1.0 KiB
JavaScript
34 lines
1.0 KiB
JavaScript
import { aliquotSum } from '../Maths/AliquotSum.js'
|
|
|
|
/**
|
|
* Problem 21 - Amicable numbers
|
|
*
|
|
* @see {@link https://projecteuler.net/problem=21}
|
|
*
|
|
* 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 amicable numbers under 10000
|
|
*
|
|
* @author PraneethJain
|
|
*/
|
|
|
|
function problem21(n) {
|
|
if (n < 2) {
|
|
throw new Error('Invalid Input')
|
|
}
|
|
|
|
let result = 0
|
|
for (let a = 2; a < n; ++a) {
|
|
const b = aliquotSum(a) // Sum of all proper divisors of a
|
|
// Check if b > a to ensure each pair isn't counted twice, and check if sum of proper divisors of b is equal to a
|
|
if (b > a && aliquotSum(b) === a) {
|
|
result += a + b
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
export { problem21 }
|