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;
}
12-26 03:30