1 /* 2 n个学校,第i个有 个参赛者,一个队伍k个人,每个队伍所有人必须来自同一学校, 3 求k使得队伍数量m最少。 4 因为k必须整除每个学校的参赛者数量 5 直接用gcd 6 */ 7 #include <bits/stdc++.h> 8 using namespace std; 9 int gcd(int a,int b) 10 { 11 return b ? gcd(b,a%b) : a; 12 } 13 int main() 14 { 15 int n; 16 scanf("%d",&n); 17 while(n--) 18 { 19 int m; 20 int num[1010]; 21 scanf("%d",&m); 22 for(int i=0;i<m;i++) 23 scanf("%d",&num[i]); 24 if(m==1) 25 { 26 printf("%d 1\n",num[0]); 27 continue; 28 } 29 int b=gcd(num[0],num[1]); 30 for(int i=2;i<m;i++) 31 b=gcd(b,num[i]); 32 int sum=0; 33 for(int i=0;i<m;i++) 34 sum=sum+num[i]/b; 35 printf("%d %d\n",b,sum); 36 } 37 }
原文:http://www.cnblogs.com/kearon/p/7215283.html