program prob4
    implicit none
    integer::n, i, j, p, ans
    integer, allocatable::a(:)
    read(*,*) n
    allocate(a(n))
    read(*,*) a
    call hsort(n,1,1,a)
    p = gcd(a(2),a(1))
    do i = 3, n
        if(mod(a(i),p) > 0) p = gcd(p,mod(a(i),p))
    end do
    write(*,*) p
    deallocate(a)
    stop
contains
    ! n行m列の配列をp列目でsort
    ! 1次元配列ならm=p=1
    subroutine hsort(n,m,p,array)
        implicit none
        integer,intent(in)::n, m, p
        integer,intent(inout)::array(n,m)

        integer ::i,k,j,l
        integer::t(m)

        if(n.le.0)then
        write(6,*)"Error, at heapsort"; stop
        end if
        if(n.eq.1)return

        l=n/2+1
        k=n
        do while(k.ne.1)
        if(l.gt.1)then
            l=l-1
            t=array(L,:)
        else
            t=array(k,:)
            array(k,:)=array(1,:)
            k=k-1
            if(k.eq.1) then
                array(1,:)=t
                exit
            end if
        end if
        i=l
        j=l+l
        do while(j.le.k)
            if(j.lt.k)then
                if(array(j,p).lt.array(j+1,p))j=j+1
            end if
            if (t(p).lt.array(j,p))then
                array(i,:)=array(j,:)
                i=j
                j=j+j
            else
                j=k+1
            end if
        end do
        array(i,:)=t
        end do

        return
    end subroutine hsort
    function gcd(x,y) result(z)
        implicit none
        integer::x, y, z, i, a, b, c
        a = y
        b = x
        do while(mod(a,b) > 0)
            c = mod(a,b)
            a = b
            b = c
        end do
        z = b
    end function
end program