Small PLAN program to display the first 20 prime numbers.
#PROGRAM PRIM40/PRIM
#DEFINE NUMPRIMES=20
#LOWER
PRIMES(NUMPRIMES) [ STORAGE AREA FOR FOUND PRIMES
MESS 8H [ OUTPUT BUFFER FOR PRIME NUMBER
HTHOU 100000
#PRO
#ENT 0
LDN 0 2 [ SAVE 2 AS FIRST PRIME
STO 0 PRIMES
LDN 1 1
LDN 0 3 [ START AT 3
LDN 4 NUMPRIMES
#
# X0 = NUMBER TO CHECK
# X1 = NUMBER OF PRIMES FOUND
# X4 = NUMBER OF PRIMES TO FIND
#
# TO CHECK IF CONTENT OF ACC 0 IS A PRIME
# WE NEED TO DIVIDE BY ALL PRIMES FOUND SO FAR
#
CHK LDN 2 0 [ INDEX INTO TABLE OF PRIMES
LOOP BXGE 2 1,FND [ END OF PRIME TABLE ?
LDX 7 0 [ PUT NUMBER TO CHECK IN ACC 7
LDN 6 0 [ CLEAR ACC 6
DVD 6 PRIMES(2) [ DIVIDE BY PRIME FROM TABLE
BZE 6 NEXT [ DIVISIBLE SO THIS NUMBER IS NOT A PRIME
ADN 2 1 [ MOVE TO NEXT PRIME IN TABLE
BRN LOOP [ AND TRY AGAIN
NEXT ADN 0 2 [ SKIP TO NEXT ODD NUMBER
BRN CHK [ AND CHECK IF PRIME
#
# NEXT PRIME HAS BEEN FOUND
#
FND STO 0 PRIMES(1) [ STORE FOUND PRIME IN TABLE
ADN 1 1 [ AND INCREMENT COUNT
BXL 1 4,NEXT [ MORE TO FIND ?
#
# DISPLAY ALL PRIMES FOUND
#
LDN 2 0 [ OFFSET IN TABLE TO DISPLAY
DISP LDX 5 PRIMES(2) [ GET PRIME NUMBER FROM TABLE
LDN 6 0 [ AND CONVERT TO
DVR 5 HTHOU [ FIVE DECIMAL CHARACTERS
LDCT 7 #200
LDX 3 '5/MESS'
CBD 6 0(3)
BCHX 3 *-1
DISTY '5/MESS' [ DISPLAY PRIME NUMBER AS DECIMAL
ADN 2 1
BXL 2 1,DISP [ SHOW NEXT PRIME IF THERE IS ONE
DONE SUSWT 2HHH [ ALL DONE :-)
#END
Output:
11.33.53<- LO PROGRAM PRIM 11.33.59<- EN 11.34.01 1.04 CORE GIVEN 192 DISPLAY : 00002 DISPLAY : 00003 DISPLAY : 00005 DISPLAY : 00007 DISPLAY : 00011 DISPLAY : 00013 DISPLAY : 00017 DISPLAY : 00019 DISPLAY : 00023 DISPLAY : 00029 DISPLAY : 00031 DISPLAY : 00037 DISPLAY : 00041 DISPLAY : 00043 DISPLAY : 00047 DISPLAY : 00053 DISPLAY : 00059 DISPLAY : 00061 DISPLAY : 00067 DISPLAY : 00071 1.11 :HALTED : HH