|
> No.2920[元記事へ]
ウラムの螺旋
17 16 15 14 13
18 5 4 3 12
19 6 1 2 11
20 7 8 9 10 ↑
21 22 23 24 25 26
右斜めの数 1,3,7,13,21,…は、n^2+n+1、n=0,1,2,3,…
中央1を41に置き換えて、n^2+n+41
!ウラムの螺旋
LET M=25 !45
!!SET TEXT HEIGHT 0.0075
SET TEXT JUSTIFY "CENTER","HALF"
SET bitmap SIZE 600,600
SET WINDOW -M/2,M/2,-M/2,M/2
LET D=41 !中央の値
LET X=0
LET Y=0
SET TEXT COLOR 1+3*PrimeQ(D)
PLOT TEXT, AT X,Y: STR$(D)
LET DX=1 !移動方向
LET DY=1
FOR S=1 TO M !ステップ数
FOR L=1 TO S !x軸方向
LET D=D+1
LET X=X+DX
SET TEXT COLOR 1+3*PrimeQ(D)
PLOT TEXT, AT X,Y: STR$(D)
NEXT L
LET DX=-DX
FOR L=1 TO S !y軸方向
LET D=D+1
LET Y=Y+DY
SET TEXT COLOR 1+3*PrimeQ(D)
PLOT TEXT, AT X,Y: STR$(D)
NEXT L
LET DY=-DY
NEXT S
END
!試行割算法
EXTERNAL FUNCTION PrimeQ(n) !素数判定 1:素数、0:素数でない
LET PrimeQ=0
IF n<2 OR n<>INT(n) THEN EXIT FUNCTION !引数を確認する
!2以上の自然数なら
IF MOD(n,2)=0 THEN !2の倍数
IF n=2 THEN LET PrimeQ=1 !2は素数
ELSEIF MOD(n,3)=0 THEN !3の倍数
IF n=3 THEN LET PrimeQ=1 !3は素数
ELSE
LET k=5
DO WHILE k*k<=n !√nまで検証する
IF MOD(n,k)=0 THEN !5,11,17,23,29,…
EXIT FUNCTION
ELSEIF MOD(n,k+2)=0 THEN !7,13,19,25,31,…
EXIT FUNCTION
END IF !+1,+3,+5は2の倍数(偶数)、+1,+4は3の倍数、+5は5の倍数
LET k=k+6
LOOP
LET PrimeQ=1 !最後まで割り切れなければ、素数である
END IF
END FUNCTION
|
|