程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> ACdream OJ 1153 (k-GCD)

ACdream OJ 1153 (k-GCD)

編輯:C++入門知識

ACdream OJ 1153 (k-GCD)


 

題意:

從給定的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;
}


 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved