#A1, A2, ..., AN の最大公約数を g とします。すると、以下で示すように g が答えになります。
#入力例 1 において、なぜどのように攻撃を行っても体力 1 にならないのでしょうか。これは、どのモンス
#ターも初期体力が偶数なので、攻撃して体力が変化しても偶数にしか変化しないためです。これを一般化す
#ると、体力 a のモンスターが体力 b (b > a) のモンスターに攻撃したときに攻撃されたモンスターの体力は
#b − a となりますが、a も b も x の倍数であるなら b − a も x の倍数です。したがって、常に x として g を
#取れるので、生きているモンスターの体力は必ず g の倍数となり、g 未満になることはありません。
#逆に、次のように最後に生き残ったモンスターの体力を g にすることができます。体力 a のモンスターと
#体力 b のモンスターがお互いの体力が等しくなるまで体力の低いほうが高い方を攻撃し続けるとユークリッ
#ドの互除法と同じ遷移になるため最終的な体力はお互いに a と b の最大公約数になります。これを 1 番目の
#モンスターと 2 番目のモンスター, 2 番目のモンスターと 3 番目のモンスター, ... と順に行うと、最終的に N
#番目のモンスターの体力が A1, A2, ..., AN の最大公約数 g になります。最後に N 番目のモンスターが他の
#モンスターを攻撃し続ければ、最後に生き残ったモンスター (N 番目のモンスター) の体力が g になります。
#実装は、ユークリッドの互除法により A1, A2, ..., AN の最大公約数を求めて出力すればよく、これは
#O(N + logA1) で動作します。

import fractions
n = int(input())
a = list(map(int,input().split()))

g =a[0]

for i in range(n-1):
  g = fractions.gcd(g,a[i+1])
  
print(g) import fractions fractions n = int(input()) n int(input()) int input() input a = list(map(int,input().split())) a list(map(int,input().split())) list map(int,input().split()) map int input().split() ().split () input split g =a[0] g a[0] a 0 for i in range(n-1):
  g = fractions.gcd(g,a[i+1])
   i range(n-1) range n-1 n 1 g = fractions.gcd(g,a[i+1]) g fractions.gcd(g,a[i+1]) fractions.gcd fractions gcd g a[i+1] a i+1 i 1 print(g) print g g = fractions.gcd(g,a[i+1]) fractions.gcd(g,a[i+1]) g g =a[0] a[0] g n = int(input()) int(input()) n a = list(map(int,input().split())) list(map(int,input().split())) a
#A1, A2, ..., AN の最大公約数を g とします。すると、以下で示すように g が答えになります。
#入力例 1 において、なぜどのように攻撃を行っても体力 1 にならないのでしょうか。これは、どのモンス
#ターも初期体力が偶数なので、攻撃して体力が変化しても偶数にしか変化しないためです。これを一般化す
#ると、体力 a のモンスターが体力 b (b > a) のモンスターに攻撃したときに攻撃されたモンスターの体力は
#b − a となりますが、a も b も x の倍数であるなら b − a も x の倍数です。したがって、常に x として g を
#取れるので、生きているモンスターの体力は必ず g の倍数となり、g 未満になることはありません。
#逆に、次のように最後に生き残ったモンスターの体力を g にすることができます。体力 a のモンスターと
#体力 b のモンスターがお互いの体力が等しくなるまで体力の低いほうが高い方を攻撃し続けるとユークリッ
#ドの互除法と同じ遷移になるため最終的な体力はお互いに a と b の最大公約数になります。これを 1 番目の
#モンスターと 2 番目のモンスター, 2 番目のモンスターと 3 番目のモンスター, ... と順に行うと、最終的に N
#番目のモンスターの体力が A1, A2, ..., AN の最大公約数 g になります。最後に N 番目のモンスターが他の
#モンスターを攻撃し続ければ、最後に生き残ったモンスター (N 番目のモンスター) の体力が g になります。
#実装は、ユークリッドの互除法により A1, A2, ..., AN の最大公約数を求めて出力すればよく、これは
#O(N + logA1) で動作します。

import fractions
n = int(input())
a = list(map(int,input().split()))

g =a[0]

for i in range(n-1):
  g = fractions.gcd(g,a[i+1])
  
print(g)