link factors procedure main(A) i := \A[1] | 20000 every (n := seq()\i, m := seq(n)\(i-n)) do write((amicable(n,m),n)," : ",m) end procedure amicable(n,m) static cache initial cache := table() if n = m then fail if /cache[n] then every (cache[n] := 0) +:= (n ~= divisors(n)) if /cache[m] then every (cache[m] := 0) +:= (m ~= divisors(m)) return (cache[n] = m, cache[m] = n) end