#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define endl '\n' #define all(x) begin(x), end(x) void dbg_print(int x) {cerr << x;} void dbg_print(long x) {cerr << x;} void dbg_print(long long x) {cerr << x;} void dbg_print(unsigned x) {cerr << x;} void dbg_print(unsigned long x) {cerr << x;} void dbg_print(unsigned long long x) {cerr << x;} void dbg_print(float x) {cerr << x;} void dbg_print(double x) {cerr << x;} void dbg_print(long double x) {cerr << x;} void dbg_print(char x) {cerr << '\'' << x << '\'';} void dbg_print(const char *x) {cerr << '\"' << x << '\"';} void dbg_print(const string &x) {cerr << '\"' << x << '\"';} void dbg_print(bool x) {cerr << (x ? "true" : "false");} template void dbg_print(const pair &x) {cerr << '{'; dbg_print(x.first); cerr << ','; dbg_print(x.second); cerr << '}';} template void dbg_print(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? "," : ""), dbg_print(i); cerr << "}";} void _print() {cerr << "]\n";} template void _print(T t, V... v) {dbg_print(t); if (sizeof...(v)) cerr << ", "; _print(v...);} template void dbg_print(bitset b) {cerr << b;} #ifndef ONLINE_JUDGE #define debug(x...) cerr << "[" << #x << "] = ["; _print(x) #else #define debug(x...) #endif // ============================================================================================== // typedef long long ll; struct base { double a, b; base(double _a = 0, double _b = 0) : a(_a), b(_b) { } const base operator+(const base &c) const { return base(a + c.a, b + c.b); } const base operator-(const base &c) const { return base(a - c.a, b - c.b); } const base operator*(const base &c) const { return base(a * c.a - b * c.b, a * c.b + b * c.a); } }; const double PI = acos(-1); void fft(vector &a, bool inv = 0) { int n = (int)a.size(); for (int i = 0; i < n; i++) { int bit = n >> 1, j = 0, k = i; while (bit > 0) { if (k & 1) j += bit; k >>= 1, bit >>= 1; } if (i < j) swap(a[i], a[j]); } double angle = 2 * PI / n * (inv ? -1 : 1); vector wn(n / 2); for (int i = 0; i < n / 2; i++) wn[i] = {cos(angle * i), sin(angle * i)}; for (int len = 2; len <= n; len <<= 1) { int aux = len / 2; int step = n / len; for (int i = 0; i < n; i += len) { for (int j = 0; j < aux; j++) { base v = a[i + j + aux] * wn[step * j]; a[i + j + aux] = a[i + j] - v; a[i + j] = a[i + j] + v; } } } for (int i = 0; inv && i < n; i++) a[i].a /= n, a[i].b /= n; } vector multiply(vector &ta, vector &tb) { int n = (int)ta.size(), m = (int)tb.size(); int t = n + m - 1, sz = 1; while (sz < t) sz <<= 1; vector a(sz), b(sz), c(sz); for (int i = 0; i < sz; i++) { a[i] = i < n ? base((double)ta[i]) : base(0); b[i] = i < m ? base((double)tb[i]) : base(0); } fft(a, 0), fft(b, 0); for (int i = 0; i < sz; i++) c[i] = a[i] * b[i]; fft(c, 1); vector res(sz); for (int i = 0; i < sz; i++) res[i] = int(round(c[i].a)); while ((int)res.size() > t && res.back() == 0) res.pop_back(); return res; } const int maxn = 1e6 + 1000; int spf[2*maxn]; vector primes; int main() { ios_base::sync_with_stdio(0); cin.tie(0); for (int i = 2; i < 2*maxn; i++) { if (spf[i] == 0) { primes.emplace_back(i); spf[i] = i; } for (int p : primes) { if (i * p >= 2*maxn || p > i) break; spf[i * p] = p; } } int n; cin >> n; vector freq_even(maxn / 2 + 1), freq_odd(maxn / 2 + 1); int cnt_1 = 0; for (int i = 0; i < n; i++) { int c; cin >> c; cnt_1 += c == 1; if (c&1) freq_odd[c / 2] = 1; else freq_even[(c - 1) / 2] = 1; } if (cnt_1 <= 1) cout << 2 << endl; else { auto ret = multiply(freq_even, freq_odd); for (int i = 0; i < ret.size(); i++) { if (ret[i] == 0 && spf[2*(i + 1) + 1] == 2*(i + 1) + 1) { cout << 2*(i + 1) + 1 << endl; break; } } } }