裴蜀定理
到目前为止做的第三个裴蜀定理(HAOI2011向量)
这么来看NOIP当时考也不错
因为裴蜀定理还是算常见
问题转化n个数中选k个求最大的GCD
O(n*sqrt sum)
完
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int GCD(int x,int y){
while(y){
int t=x;
x=y;
y=t%y;
}
return x;
}
int sum[1001]={};
int ans=-1,k;
int a[3*1001*1001]={};
int cnt=0;
void split(int sum){
int x=sqrt(sum);
for(int i=1;i<x;i++){
if(sum%i==0){
a[++cnt]=i;
a[++cnt]=sum/i;
}
}
if(x*x==sum)a[++cnt]=x;
}
int main(){
int n;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++){
scanf("%d",&sum[i]);
}
for(int i=1;i<=n;i++){
split(sum[i]);
}
sort(a,a+1+cnt);
int now=0;
for(int i=cnt;i>=1;i--){
if(a[i]==a[i+1])now++;
else now=1;
if(now>=k){
cout<<a[i];
break;
}
}
}