題意:
從給定的n個數中取出k個數,使得他們的最大公約數最大,求這個最大的公約數
分析:
暴力分解不可取,我們可以得到最大公約數肯定在[1,mmax]之間(mmax為其中最大的元素),由於mmax不大,
因此我們可以從大到小枚舉公約數,然後統計它的倍數的個數是不是大於等於k,如果是的話那麼這個數必然是最大的。
代碼如下:
#include#include #include using namespace std; const int maxn = 10010; int a[maxn]; int main() { int n,k,t,x; scanf(%d,&t); while(t--){ scanf(%d%d,&n,&k); memset(a,0,sizeof(a)); int mmax = 0; for(int i=0;i mmax) mmax = x; } int ans; bool f=0; for(int i=mmax;i>=1;i--){ int cnt=0; for(int j=i;j<=mmax;j+=i){ cnt += a[j]; if(cnt>=k){ ans = i; f=1; break; } } if(f) break; } printf(%d ,ans); } return 0; }