SOSUU = .TRUE.
DO 10 I=2,N-1
IF (MOD(N,I).EQ.0) SOSUU=.FALSE.
10 CONTINUE
プログラム例3(改良)
SOSUU = .TRUE.
M = INT(SQRT(REAL(N)))
DO 10 I=2,M
IF (MOD(N,I).EQ.0) SOSUU=.FALSE.
10 CONTINUE
プログラム例3(さらに改良)
SOSUU = .TRUE.
M = INT(SQRT(REAL(N)))
DO 10 I=2,M
IF (MOD(N,I).EQ.0) THEN
SOSUU=.FALSE.
GOTO 20
ENDIF
10 CONTINUE
20 END
プログラム例3(〜Nまでの素数を求める,その1)
DO 10 I=2,N
M=INT(SQRT(REAL(I)))
DO 20 J=2,M
IF (MOD(I,J).EQ.0) GOTO 10
20 CONTINUE
WRITE (*,*) I
10 CONTINUE
注:このプログラムの場合,IがJで割り切れたときにDOループから強制的に飛び出している.
場合によってはこれが変な動作の原因になりかねないので,以下では条件分岐で書き直してみた.
(C言語であればbreakが使える.)
プログラム例3(〜Nまでの素数を求める,その2)
I=1
10 I=I+1
IF (I.GT.N) GOTO 50
M=INT(SQRT(REAL(I)))
J=1
20 J=J+1
IF(J.GT.M) GOTO 30
IF(MOD(I,J).EQ.0) THEN
GOTO 40
ELSE
GOTO 20
ENDIF
30 WRITE(*,*) I
40 GOTO 10
50 END
プログラム例4(エラトステネスのふるい)
INTEGER A(10000)
DO 10 I=1,N
A(I)=1
10 CONTINUE
DO 20 I=2,N
IF (A(I).EQ.1) THEN
WRITE(*,*) I
DO 30 K=2*I,N,I
A(K)=0
30 CONTINUE
ENDIF
20 CONTINUE
<戻る>