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 5.4.1) (judge verdict: Runtime Error)

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>

int main() {
    int N, i, j, finalcount=0;
    int max=1, min;
    
    int size;
    scanf("%d", &N);
    
    int A[N];
    
    for(i=0; i<N; ++i){
        scanf("%d",&A[i]);
    }
    
    for(i=0; i<N; ++i){
        if(max < A[i]) max = A[i];
    }
    
    min = max;
    
    for(i=0; i<N; ++i){
        if(min > A[i]) min = A[i];
    }

    
    if(max == min){
        printf("%d\n", A[0]);
    } else {
    
    size = max - min;
    size = max;
    printf("size = %d\n", size);

    int B[size];
    
    for(i=0; i <= size; ++i){
        B[i] = 0;
    }
    
    for(i=0; i <= size; ++i){
        for(j=0; j<N; ++j){
            if(A[j]%(i+1)==0) B[i]+=1;
        }
    }
    
    i=size+1;
    
    while(finalcount == 0){
        i -= 1;
        if(B[i] >= N-1) finalcount += 1;
    }
    
    printf("%d\n", i+1);
    return 0;
        
    }
}