program main
  implicit none
  integer :: i, j, n, me, ne
  logical :: is_prime[*]
  me = this_image()  
  ne = num_images()
  if (me == 1) then
    do
      print *, "Please enter an integer n >= 2 :"
      read *, n
      if (n >= 2) exit
    end do
  end if
  call co_broadcast(n, 1)
  is_prime = .true.
  sync all
  i = me + 1
  do
    if (i ** 2 > n) exit
    if (mod(n, i) == 0) then
      do j = 1, ne
        is_prime[j] = .false.
      end do
    end if
    if (is_prime .eqv. .false.) exit
    i = i + ne    
  end do
  sync all
  if (me == 1) then
    if (is_prime .eqv. .true.) then
      print *, n, "is a prime number."
    else
      print *, n, "is not a prime number."
    end if
  end if
end program
