D-最大gcd
题目描述:
解题思路:对于任何一个数i(i>1),它与它的任何倍数的数的gcd都为i,如gcd(2,4)=gcd(2,8)=gcd(2,14)=2,所以对于这道题我们从2开始枚举到最大数maxn,找出原序列中是否存在i的倍数,如果存在那么i是可能的答案,再取max即可,ans=max(ans,i)。
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int a[N];
int n;
int main(){
scanf("%d",&n);
int x,maxn = 1;
for(int i = 0; i < n; i++){
scanf("%d",&x);
a[x]++;
maxn = max(maxn,x);
}
int ans = 1;
for(int i = 2; i <= maxn; i++){
int cnt = 0;
for(int j = i; j <= maxn; j+=i){
cnt+=a[j];
if(cnt > 1) //cnt>1说明至少存在一个i的倍数
break;
}
if(cnt > 1)
ans = max(ans,i);
}
printf("%d\n",ans);
return 0;
}