home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / fortran / sieve.for < prev    next >
Encoding:
Text File  |  1988-08-11  |  1.4 KB  |  60 lines

  1.     subroutine second (t1)
  2. c
  3. c  MS version of SECOND (timing routine)
  4. c
  5.     integer*2 ih,im,is,ihu
  6.     integer*4 t1
  7.     call gettim (ih,im,is,ihu)
  8.     t1 = (ih*3600+im*60+is)*100+ihu
  9.     end
  10. *     prime number sieve program (integer*4 version)
  11.  
  12.       integer*4   i, niter, count, prime
  13.     integer*4 t1,t2
  14. c     integer   t1 (4), t2 (4)
  15.  
  16. c     write  (*, '  ('' no. iterations: '' )   ')
  17. c     read   (*, *) niter
  18.       niter = 10
  19.  
  20. c     call time (t1)
  21.       call second (t1)
  22.       do 30 i = 1, niter
  23.          call sieve (count, prime)
  24. 30       continue
  25.  
  26. c     call etime (t2, t1, niter)
  27.       call second (t2)
  28.       write  (*, 40) count, prime
  29. 40    format ('0 done', I6, ' primes, largest is ', I6)
  30.       write (*,*) 'Elapsed=',t2-t1,' sieve4 '
  31.       write (*,*) 'Average per iteration=',+(t2-t1)/niter
  32.       end
  33.  
  34.       subroutine sieve (count, largest)
  35.       integer*4         count, largest
  36.  
  37.       integer*4     size
  38.       parameter   (size = 8191)
  39.  
  40.       integer*4   i, prime, k
  41.       logical     flags (size)
  42.  
  43.       count = 0
  44.       do 10 i = 1, size
  45.          flags (i) = .true.
  46. 10       continue
  47.  
  48.       do 30 i = 1, size
  49.          if (flags (i)) then
  50.             prime = i + i + 1
  51.             do 20 k = i + prime, size, prime
  52.                flags (k) = .false.
  53. 20             continue
  54.             count = count + 1
  55.             end if
  56. 30       continue
  57.       largest = prime
  58.       return
  59.       end
  60.