Amicable pairs: Difference between revisions

Added solution for Action!
(Add Zig)
(Added solution for Action!)
Line 262:
12285 14595
17296 18416</pre>
=={{header|Action!}}==
Calculations on a real Atari 8-bit computer take quite long time. It is recommended to use an emulator capable with increasing speed of Atari CPU.
<lang Action!>DEFINE MAXNUM="20000"
BYTE ARRAY primes(MAXNUM+1)
 
PROC Sieve()
CARD i,j
 
SetBlock(primes,MAXNUM+1,1)
primes(0)=0 primes(1)=0 i=2
WHILE i<=MAXNUM
DO
IF primes(i)=1 THEN
FOR j=2*i TO MAXNUM STEP i
DO
primes(j)=0
OD
FI
i==+1
OD
RETURN
 
CARD FUNC SumDivisors(CARD x)
CARD i,max,sum
 
sum=1 i=2 max=x
WHILE i<max
DO
IF x MOD i=0 THEN
max=x/i
IF i<max THEN
sum==+i+max
ELSEIF i=max THEN
sum==+i
FI
FI
i==+1
OD
RETURN (sum)
 
PROC Main()
CARD m,n
 
Sieve()
FOR m=1 TO MAXNUM-1
DO
IF primes(m)=0 THEN
n=SumDivisors(m)
IF n<MAXNUM AND primes(n)=0 AND n>m THEN
IF m=SumDivisors(n) THEN
PrintF("%U %U%E",m,n)
FI
FI
FI
OD
RETURN</lang>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Amicable_pairs.png Screenshot from Atari 8-bit computer]
<pre>
220 284
1184 1210
2620 2924
5020 5564
6232 6368
10744 10856
12285 14595
17296 18416
</pre>
 
=={{header|Ada}}==
 
Anonymous user