RosettaCodeData/Task/Amicable-pairs/Phix/amicable-pairs-2.phix
2026-04-30 12:34:36 -04:00

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)