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

Back