我还以为有什么高论。。。
暴力分解质因数sort就好了。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define maxn 1050 using namespace std; int n,k,x,top=0,s[maxn*maxn*10]; int main() { scanf("%d%d",&n,&k); for (int i=1;i<=n;i++) { scanf("%d",&x); int t=sqrt(x); for (int j=1;j<=t;j++) { if (x%j) continue; s[++top]=j; if ((x/j)!=j) s[++top]=x/j; } } sort(s+1,s+top+1);int ret=1; for (int i=top-1;i>=0;i--) { if (s[i]==s[i+1]) ret++; else { if (ret>=k) {printf("%d ",s[i+1]);return 0;} else ret=1; } } return 0; }