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; }