题目解析
一个数组 a1 a2 a3 a4 a5-------an, ,链接:登录—专业IT笔试面试备考平台_牛客网
定义序列的最大 gcd\gcdgcd 为:每次选择两个正整数 i,j(1≤i<j≤n)i,j(1 \leq i < j \leq n)i,j(1≤i<j≤n),最大的 gcd(ai,aj) 即为这个序列的最大 gcd。
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6;
int a[N+10];
int num[N + 10];
int main() {
int t=1;
while (t--) {
int n, i, j;
cin >> n;
while (n--) {
int x;
cin >> x;
a[x]++;
}
for (int i = 1; i <= N; i++) {
for (int j = i; j <= N; j += i) {
num[i] += a[j];
}
}
for (int i = N; i >= 1; i--) {
if (num[i] >= 2) {
cout << i << "\n";
break;
}
}
}
return 0;
}
代码思路
将数组采用哈希数组储存起来之后,将 i 作为因子,j作为倍数遍历a数组,储存num数组,记录因子数量,在从大到小遍历num数组,找到最大的因子;