! Eratosthenes sieve PROGRAM ex6_4 IMPLICIT NONE INTEGER :: index(10000), prime(10000), max = 0, n, m = 0 DO WHILE ( max <= 1 .OR. max > 10000 ) ! 1 <= max <= 10000 PRINT '(1X,A)', 'Upper limit(<10000) ?' ! となるまで待つ。 READ *, max END DO index = 1 ! indexを初期化 DO n = 2, INT( max ** 0.5E0 ) IF ( index(n) == 0 ) CYCLE ! 注1: IF (...) THEN で書いてもよい index(n**2:max:n) = 0 ! 注2: n の倍数を消す END DO DO n = 2, max IF ( index(n) == 1 ) THEN ! IF (...) CYCLE で書いてもよい m = m + 1 prime(m) = n END IF END DO PRINT '(I5, A)', m, '個見つかりました。' PRINT '(10I5)', prime(1:m) END PROGRAM ex6_4