http://acm.hdu.edu.cn/showproblem.php?pid=5207
题意:给你一组数n,求出这组数中的最大的一组最大公约数
解法:统计这n个数的因子数 , 枚举每一个数为因子的因子个数,反向输出因子个数大于2的因子即为答案。
#include <bits/stdc++.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define cin(a) scanf("%d",&a)
#define pii pair<int,int>
#define ll long long
#define gcd __gcd
const int inf = 0x3f3f3f3f;
const int M = 1e9+7;
const int N = 100009 ;
int a[N] , b[N] , vis[N];
int num[N];
int main()
{
int t ;
scanf("%d" , &t);
int cnt = 0 ;
while(t--)
{
int n ;
scanf("%d" , &n);
int ma = 0 ;
memset(vis, 0 ,sizeof(vis));
memset(num , 0 , sizeof(num));
for(int i = 0 ; i < n ; i++)
{
scanf("%d" , &a[i]);
vis[a[i]]++;
ma = max(ma , a[i]);
}
for(int i = 2 ; i <= ma ; i++)
{
for(int j = i ; j <= ma ; j += i)
{
num[i] += vis[j];
}
}
num[1] = 2 ;
for(int i = ma ; i >= 1 ; i--)
{
if(num[i] >= 2)
{
cout << "Case #" << ++cnt << ": " << i << endl ;
break;
}
}
}
return 0;
}