! 例題 6-8 エラトステネスのふるい法(改良版) [配列関数 ] PROGRAM ex6_8 IMPLICIT NONE INTEGER, ALLOCATABLE :: prime( : ) INTEGER :: max, n LOGICAL, ALLOCATABLE :: index( : ) PRINT *, 'Upper limit ( >= 2 ) ?' READ *, max ALLOCATE ( index( 2 : max ), prime( 2 : max ) ) index = .TRUE. prime = (/ ( n, n = 2, max ) /) DO n = 2, INT( SQRT( REAL( max ) ) ) IF ( .NOT. index( n ) ) CYCLE index( n ** 2 : max : n ) = .FALSE. END DO PRINT '( 1X, I5, A )', COUNT( index ), ' 個見つかりました。' PRINT '( 1X, 10I6 )', PACK( prime, index ) END PROGRAM ex6_8