mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-20 10:37:07 +08:00

* feat: Project Euler Problem 21 * test: Project Euler 21 * fix: test description in Project Euler 21
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 }
|