const maxNum = 1300
for(let num1 = 3; num1 < maxNum ; num1++) {
for(let num2 = 3; num2 < num1; num2++) {
let sum1 = 1, sum2 = 1
for (let div1 = 2; div1 < num1; div1++) {
if (num1 % div1 === 0) {
sum1 += div1
}
}
for (let div2 = 2; div2 < num2; div2++) {
if (num2 % div2 === 0) {
sum2 += div2
}
}
if (num1 === sum2 && sum1 === num2 && num1 !== num2) {
console.log(num1 + " and " + num2 + " are amicable numbers!")
}
}
}
const sumDivisors = num => {
let res = 0;
for(let i=1;i<num;i++)
if( (num % i) == 0)
res += i
return res;
}
var divisors = new Array(maxNum).fill(0).map( (_,i) => i)
.reduce( (acc,num) => ({...acc, [num]: sumDivisors(num)}))
var amicable = Object.entries(divisors)
.filter( ([num,sum]) => num < sum && divisors[sum] == num);
for(let [num1,num2] of amicable)
console.log(num1 + " and " + num2 + " are amicable numbers!")