PARAMETER (NUMPRIMES = 1000)
INTEGER PRIME(NUMPRIMES)
COMMON / PNB / PRIME
PRIME(1) = 2
PRIME(2) = 3
CALL LIB$INIT_TIMER
DO I=3,NUMPRIMES
PRIME(I) = NEXTPRIME( PRIME(I-1)+1 )
ENDDO
CALL LIB$SHOW_TIMER
DO I=1,NUMPRIMES
WRITE(3,1) PRIME(I)
ENDDO
PRINT*, 'Output file is FOR003.DAT'
1 FORMAT( I )
END
INTEGER FUNCTION NEXTPRIME( N )
C Return next prime number => N
INTEGER N, NUMBER
PARAMETER (NUMPRIMES = 10000)
INTEGER PRIME(NUMPRIMES)
COMMON / PNB / PRIME
NUMBER = N
IF (NUMBER .GT. 3) THEN
IF ( MOD(NUMBER,2) .EQ. 0 ) NUMBER = NUMBER + 1 !rule out even numbers. They are not prime
I = 2 !start with second prime since we only test odd numbers.
DO WHILE ( PRIME(I)*PRIME(I) .LE. NUMBER )
IF ( MOD(NUMBER,PRIME(I)) .EQ. 0 ) THEN !it's not prime
NUMBER = NUMBER + 2 !even numbers aren't prime
I = 2 !start over again with new number
ELSE
I = I + 1 !test with next prime
ENDIF
ENDDO
ENDIF !if number > 3
NEXTPRIME = NUMBER
RETURN
END