2 4 1 2 3 4 3 3 6 9
Case #1: 2 Case #2: 3
做法很巧妙。记录每个数的所有因子,排序,再找整个数组里出现次数>=2的最大因子
#include<iostream> #include<algorithm> #include<string> #include<map> #include<vector> #include<cmath> #include<string.h> #include<stdlib.h> #include<cstdio> #define ll long long using namespace std; int x[100001]; int main(){ int t; cin>>t; int cnt=0; while(t--){ memset(x,0,sizeof(x)); int n,a; cin>>n; int max=-1; for(int i=0;i<n;++i){ cin>>a; if(a>max) max=a; int g=sqrt((double)a); for(int i=1;i<=g;++i){ if(a%i==0){ x[i]++; x[a/i]++; } } if(g*g==a) x[g]--; } printf("Case #%d: ", ++cnt); for(int i = max; i >= 1; i--){ if(x[i]>=2){ printf("%d\n",i); break; } } } return 0; }