;１０００個の素数を求めます。
;２、３、５、７・・・と順番に１０００個計算します。
SAMP   START
	LAD GR1,1 ;GR1=1を定数扱いする
  LAD GR4,2
  ST GR4,ALL ;既知のPNの数
  ST GR4,PN
  LAD GR0,3
     ST GR0,PN,GR1 ；既知のPNは２と３として格納
  LAD GR2,5 ; 新PN候補として５を調べる
  LD GR5,GR2
  XOR GR3,GR3 ;既知PN参照用インデックス初期化
  JUMP DIV2 ;以上初期化を終わり計算開始
DIV CPL GR4,GR7
  JPL NZ8
DIV2 XOR GR6,GR6
  XOR GR7,GR7
CL2 LD GR0,GR4
  ADDL GR6,GR1
  AND GR0,MSK
  JNZ CL4
  SLL GR4,1
  JUMP CL2
CL4 CPL GR2,GR4
  JPL PLS
  JMI MIS
  JZE ZER
PLS OR GR7,GR1
  SUBL GR2,GR4
  SRL GR4,1
  SUBL GR6,GR1
  JZE PM
  SLL GR7,1
  JPL CL4
MIS SRL GR4,1
  SUBL GR6,GR1
  JZE PM
  SLL GR7,1
  JUMP CL4
ZER OR GR7,GR1
  SLL GR7,-1,GR6
  JUMP NL
PM LD GR2,GR2
  JNZ NZ8
NL LD GR2,GR5
  JUMP NPN
NZ8 LD GR2,GR5
  ADDL GR3,GR1
  CPL GR3,ALL
  JNZ PNX
  LD GR7,GR2
  ST GR2,PN,GR3
  ADDL GR3,GR1
  ST GR3,ALL
  CPL GR3,LIM
  JZE FIN
NPN	LAD 	GR2,2,GR2 　;新PN候補作成
	CPL	GR2,N65535 ;16-bitの限界判定
	JZE	FIN
  LD GR5,GR2
  LD GR3,GR1
PNX LD GR4,PN,GR3
  	JUMP	DIV
FIN 	RET
MSK	DC	#8000
ALL 	DS 	1
LIM DC   6545;4000;1980;素数を１０００個求めたならば計算終了の制限数
PN DS    6545;4000;;1980 ;素数を１０００個格納する領域を確保
N65535	DC	#FFFF ;16-bitの最大値かつ明らかに非素数
	END
;-------------------------------------------
;素数を２００個求めるように変更することもできます。
; LIM DC 200 それから PN DS 200 と書き直します。
;-------------
;このプログラムでは1976個の素数までを求めることができるようです。
;それ以上、たとえば2000個の素数を求める設定にすると
;素数でないものが含むようになりま
;-------------------------
;H23_春_図形の回転１.txt もお試しください。
;CASL2 Visible Inside が図形の変形の問題を解くときにも
;たいへん効果的であることがわかります。
;----------------------------------------
