|
| 1 | +/* |
| 2 | + 'In number theory, friendly numbers are two or more natural numbers with a common abundancy index, the |
| 3 | + ratio between the sum of divisors of a number and the number itself.' |
| 4 | + Source: https://en.wikipedia.org/wiki/Friendly_number |
| 5 | + See also: https://mathworld.wolfram.com/FriendlyNumber.html#:~:text=The%20numbers%20known%20to%20be,numbers%20have%20a%20positive%20density. |
| 6 | +*/ |
| 7 | + |
| 8 | +export const FriendlyNumbers = (firstNumber, secondNumber) => { |
| 9 | + // input: two integers |
| 10 | + // output: true if the two integers are friendly numbers, false if they are not friendly numbers |
| 11 | + |
| 12 | + // First, check that the parameters are valid |
| 13 | + if (!Number.isInteger(firstNumber) || !Number.isInteger(secondNumber) || firstNumber === 0 || secondNumber === 0 || firstNumber === secondNumber) { |
| 14 | + throw new Error('The two parameters must be distinct, non-null integers') |
| 15 | + } |
| 16 | + |
| 17 | + return abundancyIndex(firstNumber) === abundancyIndex(secondNumber) |
| 18 | +} |
| 19 | + |
| 20 | +function abundancyIndex (number) { |
| 21 | + return sumDivisors(number) / number |
| 22 | +} |
| 23 | + |
| 24 | +function sumDivisors (number) { |
| 25 | + let runningSumDivisors = number |
| 26 | + for (let i = 0; i < number / 2; i++) { |
| 27 | + if (Number.isInteger(number / i)) { |
| 28 | + runningSumDivisors += i |
| 29 | + } |
| 30 | + } |
| 31 | + return runningSumDivisors |
| 32 | +} |
0 commit comments