题目描述
给定一个由n个正整数组成的数组,你的任务是找到两个整数,使得它们的最大公约数尽可能大。
输入格式
第一行输入一个整数n:数组的大小。第二行有n个整数x1,x2,...,xn:数组的内容。
输出格式
输出最大的最大公约数。
样例
Input 1
5 3 14 15 7 9
Output 1
7
数据范围
2 ≤ n ≤ 2 * 10^5, 1 ≤ xi ≤ 10^6
样例解释
输入: 5 3 14 15 7 9 输出: 7 解释: 7是7和14的最大公约数。
虽然是EX题,但是并不难,时间限制到达了2s且常数不大,所以可以将每一个数的因数分解出来,反向找到最大的共同因数并输出(才不是暴力)。
在一个sqrt卡了好久,下次再也不用这玩意啦。
AC代码如下:
#include <bits/stdc++.h>
using namespace std;
long long nums[1000006];
int n;
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
{
int t;
cin >> t;
for (int i = 1; i * i <= t; i++)
{
if (t % i == 0)
{
nums[i]++;
nums[t / i]++;
}
if (i * i == t)
nums[i]--;
}
}
for (int i = 1000005; i > 0; i--)
{
if (nums[i] >= 2)
{
cout << i;
return 0;
}
}
cout << 1;
}