52 lines
1.6 KiB
Text
52 lines
1.6 KiB
Text
NORMAL MODE IS INTEGER
|
|
PRINT COMMENT$ SMITH NUMBERS$
|
|
|
|
R GENERATE PRIMES UP TO 10,000 USING SIEVE METHOD
|
|
BOOLEAN SIEVE
|
|
DIMENSION SIEVE(10000)
|
|
DIMENSION PRIMES(1500)
|
|
|
|
THROUGH SET, FOR I=2, 1, I.G.10000
|
|
SET SIEVE(I) = 1B
|
|
|
|
THROUGH NXPRIM, FOR P=2, 1, P.G.100
|
|
WHENEVER SIEVE(P)
|
|
THROUGH MARK, FOR I=P*P, P, I.G.10000
|
|
MARK SIEVE(I) = 0B
|
|
NXPRIM END OF CONDITIONAL
|
|
|
|
NPRIMS = 0
|
|
THROUGH CNTPRM, FOR P=2, 1, P.G.10000
|
|
WHENEVER SIEVE(P)
|
|
PRIMES(NPRIMS) = P
|
|
NPRIMS = NPRIMS + 1
|
|
CNTPRM END OF CONDITIONAL
|
|
|
|
R CHECK SMITH NUMBERS
|
|
THROUGH SMITH, FOR I=4, 1, I.GE.10000
|
|
WHENEVER .NOT. SIEVE(I)
|
|
K = I
|
|
PFSUM = 0
|
|
THROUGH FACSUM, FOR P=0, 1, P.GE.NPRIMS .OR. K.E.0
|
|
L = PRIMES(P)
|
|
FACDIV WHENEVER K/L*L.E.K .AND. K.NE.0
|
|
PFSUM = PFSUM + DGTSUM.(L)
|
|
K = K/L
|
|
TRANSFER TO FACDIV
|
|
FACSUM END OF CONDITIONAL
|
|
WHENEVER PFSUM.E.DGTSUM.(I), PRINT FORMAT NUMFMT,I
|
|
SMITH END OF CONDITIONAL
|
|
|
|
VECTOR VALUES NUMFMT = $I5*$
|
|
|
|
R GET SUM OF DIGITS OF N
|
|
INTERNAL FUNCTION(N)
|
|
ENTRY TO DGTSUM.
|
|
DSUM = 0
|
|
DNUM = N
|
|
LOOP WHENEVER DNUM.E.0, FUNCTION RETURN DSUM
|
|
DSUM = DSUM + DNUM-DNUM/10*10
|
|
DNUM = DNUM/10
|
|
TRANSFER TO LOOP
|
|
END OF FUNCTION
|
|
END OF PROGRAM
|