Advertisement
Guest User

Untitled

a guest
Oct 25th, 2019
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. subroutine sieve(is_prime, n_max)
  2. ! =====================================================
  3. ! Uses the sieve of Eratosthenes to compute a logical
  4. ! array of size n_max, where .true. in element i
  5. ! indicates that i is a prime.
  6. ! =====================================================
  7.     integer, intent(in)   :: n_max
  8.     logical, intent(out)  :: is_prime(n_max)
  9.     integer :: i
  10.     is_prime = .true.
  11.     is_prime(1) = .false.
  12.     do i = 2, int(sqrt(real(n_max)))
  13.         if (is_prime (i)) is_prime (i * i : n_max : i) = .false.
  14.     end do
  15.     return
  16. end subroutine
  17.  
  18. subroutine logical_to_integer(prime_numbers, is_prime, num_primes, n)
  19. ! =====================================================
  20. ! Translates the logical array from sieve to an array
  21. ! of size num_primes of prime numbers.
  22. ! =====================================================
  23.     integer                 :: i, j=0
  24.     integer, intent(in)     :: n
  25.     logical, intent(in)     :: is_prime(n)
  26.     integer, intent(in)     :: num_primes
  27.     integer, intent(out)    :: prime_numbers(num_primes)
  28.     do i = 1, size(is_prime)
  29.         if (is_prime(i)) then
  30.             j = j + 1
  31.             prime_numbers(j) = i
  32.         end if
  33.     end do
  34. end subroutine
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement