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
<戻る>