Two integers 



N


{\displaystyle N}

 and 



M


{\displaystyle M}

 are said to be amicable pairs if 



N
≠
M


{\displaystyle N\neq M}

 and the sum of the proper divisors of 



N


{\displaystyle N}

 (




s
u
m

(

p
r
o
p
D
i
v
s

(
N
)
)


{\displaystyle \mathrm {sum} (\mathrm {propDivs} (N))}

) 



=
M


{\displaystyle =M}

 as well as 




s
u
m

(

p
r
o
p
D
i
v
s

(
M
)
)
=
N


{\displaystyle \mathrm {sum} (\mathrm {propDivs} (M))=N}

.



Example

1184 and 1210 are an amicable pair, with proper divisors:

   1, 2, 4, 8, 16, 32, 37, 74, 148, 296, 592   and 
   1, 2, 5, 10, 11, 22, 55, 110, 121, 242, 605   respectively.


Task

Calculate and show here the Amicable pairs below 20,000; (there are eight).



Related tasks
 Proper divisors
 Abundant, deficient and perfect number classifications
 Aliquot sequence classifications and its amicable classification. 


import extensions;
import system'routines;
 
const int N = 20000;
 
extension op
{
    ProperDivisors
        = Range.new(1,self / 2).filterBy:(n => self.mod:n == 0);
 
    get AmicablePairs()
    {
        var divsums := Range
                         .new(0, self + 1)
                         .selectBy:(i => i.ProperDivisors.summarize(Integer.new()))
                         .toArray();
 
        ^ 1.repeatTill(divsums.Length) 
            .filterBy:(i)
            {
                var ii := i; 
 
                var sum := divsums[i];
                ^ (i < sum) && (sum < divsums.Length) && (divsums[sum] == i)
            } 
            .selectBy:(i => new { Item1 = i; Item2 = divsums[i]; })
    }
}
 
public program()
{
    N.AmicablePairs.forEach:(pair)
    {
        console.printLine(pair.Item1, " ", pair.Item2)
    }
}