HDU——5019 Revenge of GCD

来源:互联网 发布:淘宝比较好的女鞋店 编辑:程序博客网 时间:2024/06/05 05:41

题目大意:求出X和Y的第K大的公约数。

思路:先求出X和Y的最大公约数,然后对最大公约数所有因子进行排序,找出第K大的数。

题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=5019

#include <iostream>#include <algorithm>#include <cstdio>#include <vector>using namespace std;typedef long long LL;vector<LL> factor;LL GCD(LL X,LL Y){    return Y==0 ? X:GCD(Y,X%Y);}int main(){    int T;    LL X,Y,K,i;    scanf("%d",&T);    while(T--)    {        while(!factor.empty()) factor.clear();        scanf("%I64d %I64d %I64d",&X,&Y,&K);        LL temp = GCD(X,Y);        for(i = 1; i*i <= temp; i++)        {           if(temp%i == 0)           {               factor.push_back(i);               if((i*i) != temp) factor.push_back(temp/i);           }        }        sort(factor.begin(),factor.end());        if(K > factor.size()) printf("-1\n");        else            printf("%I64d\n",factor[factor.size()-K]);    }    return 0;}


0 0