39 lines
634 B
Text
39 lines
634 B
Text
INCLUDE "H6:SIEVE.ACT"
|
|
|
|
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()
|
|
DEFINE MAXNUM="20000"
|
|
BYTE ARRAY primes(MAXNUM+1)
|
|
CARD m,n
|
|
|
|
Put(125) PutE() ;clear the screen
|
|
Sieve(primes,MAXNUM+1)
|
|
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
|