OJ地址 LYNUOJ
描述
今天是国庆节,小Z为了给祖国庆祝生日拿来了n个数字a[1],a[2]…a[n]。
求max{gcd(ai,aj)} ( i!=j ) 。
输入描述
第一行一个整数n。
之后一行n个数,表示a[1],a[2]…a[n]。
输出描述
输出一个整数表示答案。
输入样例
3 4 3 6
输出样例
3
思路 :
统计数组每个数的因子,找出最大的那个出现次数大于等于2的因子即为答案
代码 :
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int MAXN = 1e5 + 10;
int flag[MAXN],ans=-1;
void dec(int n) {
for (int i = 1; i*i <= n; i++)
{
if (n % i == 0) {
flag[i]++;
flag[n / i]++;
if (flag[i] >= 2) ans = max(ans, i);
if (flag[n / i] >= 2) ans = max(ans, n / i);
}
}
}
int main() {
int n,num;
cin >> n;
while (n--)
{
cin >> num;
dec(num);
}
cout << ans;
}