最大的最大公约数
51Nod - 1179时间:1000ms
AC代码
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <queue>
#include <cstring>
#define ll long long
using namespace std;
const int INF = 1e9;
const int N = 1000010;
int a[N];
int main()
{
int n;
cin >> n;
int s, cnt = 0, ans = 0;
for(int i = 0; i < n; i++)
{
scanf("%d",&s);
a[s]++;
}
for(int i = N; i >= 1; i--)
{
cnt = 0;
for(int j = i; j < N; j += i)
{
cnt += a[j];
if(cnt >= 2)
break;
}
if(cnt >= 2)
{
ans = i;
break;
}
}
cout << ans << endl;
return 0;
}
用暴力肯定超时,所以用倍数的形式来解,并且从最大的数开始,刚开始的操作是记录重复的数的个数