25 lines
557 B
Text
25 lines
557 B
Text
atom t0 = time()
|
|
--constant MX = 20000 -- (see commented-out output)
|
|
constant MX = 524_000_000
|
|
constant N = floor(sqrt(MX))
|
|
sequence x = repeat(1,MX+1)
|
|
|
|
for i=2 to N do
|
|
integer p = i*i,
|
|
k = i+i+1
|
|
x[p] += i
|
|
for j=p+i to MX by i do
|
|
x[j] += k
|
|
k += 1
|
|
end for
|
|
end for
|
|
|
|
sequence amicable_pairs = {}
|
|
for m=4 to MX do
|
|
integer n = x[m]
|
|
if n > m and n <= MX and m == x[n] then
|
|
amicable_pairs &= {{m,n}}
|
|
end if
|
|
end for
|
|
printf(1,"Top %,d: %v\n",{MX,shorten(amicable_pairs,"pairs",3)})
|
|
?elapsed(time()-t0)
|