题目大意:求出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;
}