Problem:
Score : 300 points

Problem Statement

There are N integers, A_1, A_2, ..., A_N, written on the blackboard.

You will choose one of them and replace it with an integer of your choice between 1 and 10^9 (inclusive), possibly the same as the integer originally written.

Find the maximum possible greatest common divisor of the N integers on the blackboard after your move.

Constraints

All values in input are integers.

2 \leq N \leq 10^5

1 \leq A_i \leq 10^9

Output

Input is given from Standard Input in the following format:

N
A_1 A_2 ... A_N

Output

Print the maximum possible greatest common divisor of the N integers on the blackboard after your move.

Sample Input 1

3
7 6 8

Sample Output 1

2

If we replace 7 with 4, the greatest common divisor of the three integers on the blackboard will be 2, which is the maximum possible value.

Sample Input 2

3
12 15 18

Sample Output 2

6

Sample Input 3

2
1000000000 1000000000

Sample Output 3

1000000000

We can replace an integer with itself.

Solution in C++ (GCC 9.2.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h>

#define fastio ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define endl "\n"

using namespace std;
using ll = long long;

const ll MOD = 1000000007LL; // = 10^9 + 7
const double PI = 3.14159265358979;

// 最大公約数 : 3,4 ->  1
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }

void solve()
{
  int n;
  cin >> n;
  vector<int> a(n);
  cin >> a[0] >> a[1];
  if (n == 2)
  {
    cout << max(a[0], a[1]);
    return;
  }

  cin >> a[2];
  int gcd0 = gcd(a[1], a[2]);
  int gcd1 = gcd(a[0], a[2]);
  int gcd2 = gcd(a[0], a[1]);

  int now_gcd = max({gcd0, gcd1, gcd2});
  int may_waste_gcd = min({gcd0, gcd1, gcd2});

  for(int i = 3; i < n; ++i)
  {
    cin >> a[i];
    if (a[i] % now_gcd == 0) continue;

    int tmp_gcd = gcd(a[i], now_gcd);
    now_gcd = max(tmp_gcd, may_waste_gcd);
    may_waste_gcd = min(tmp_gcd, may_waste_gcd);
  }
  cout << now_gcd;
}

int main()
{
  fastio;
  solve();

  return 0;
}