PRINT PRINT "ノルム100以下で実部も虚部も0以上の「ガウス素数」を列挙します。" PRINT PRINT "ガウス素数の条件" PRINT " 1. 実部また虚部のみのガウス整数: 大きさが4で割ると3余る素数のとき" PRINT " 2. 実部かつ虚部があるガウス整数: ノルム(大きさの2乗)が素数のとき" PRINT PRINT " ( 実部 ,虚部 )" LET a=10 LET b=10 SET WINDOW -1,a+1,-1,b+1 DRAW grid(a/10,b/10) DRAW circle WITH SCALE(10) LET C=0 FOR x=0 TO a FOR y=0 TO b IF x^2+y^2>100 THEN GOTO 10 IF GaussianPrimeQ(x,y)=1 THEN DRAW disk WITH SCALE(0.1)*SHIFT(x,y) LET C=C+1 PRINT USING "###":C; PRINT ": "; PRINT "( "; PRINT USING "##":x; PRINT " , "; PRINT USING "##":y; PRINT " ) : ノルム = "; PRINT USING "##":x^2+y^2 END IF 10 NEXT y NEXT x PRINT END EXTERNAL FUNCTION GaussianPrimeQ(x,y) !ガウス整数(複素数 z=x+y*i) 1:素数、0:素数でない LET GaussianPrimeQ=0 IF x<0 THEN LET x=-x IF y<0 THEN LET y=-y IF y=0 THEN IF MOD(x,4)=3 AND PrimeQ(x)<>0 THEN LET GaussianPrimeQ=1 ELSEIF x=0 THEN IF MOD(y,4)=3 AND PrimeQ(y)<>0 THEN LET GaussianPrimeQ=1 ELSE IF PrimeQ(x*x+y*y)<>0 THEN LET GaussianPrimeQ=1 END IF END FUNCTION EXTERNAL FUNCTION PrimeQ(n) !素数判定 1:素数、0:素数でない LET PrimeQ=0 IF n>1 AND n=INT(n) THEN IF MOD(n,2)=0 THEN IF n=2 THEN LET PrimeQ=1 ELSE !奇数なら LET t=INT(SQR(n)) FOR k=3 TO t STEP 2 IF MOD(n,k)=0 THEN EXIT FOR NEXT k IF k>t THEN LET PrimeQ=1 END IF END IF END FUNCTION