求A,B两个数字的第K大公约数,,先算出最大公约数 然后暴力求出最大公约数的所有约数
#include<iostream>
#include<cstdio>
#include<set>
#include<string>
#include<string.h>
#include<cstring>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<cctype>
#include<algorithm>
#include<sstream>
#include<utility>
#include<cmath>
#define mt(a) memset(a,0,sizeof (a))
#define fl(a,b,c) fill(a,b,c)
#define SWAP(a,b,t) (t=a,a=b,b=t)
#define inf 1000000
using namespace std;
typedef long long ll;
ll gcd(ll M, ll N)
{
return N == 0 ? M : gcd(N, M%N);
}
ll Prime[5000000];
int main()
{
int T;
cin >> T;
while (T--)
{
ll x, y, z;
scanf("%lld %lld %lld", &x, &y, &z);
ll ans = 0; ll i;
int k = 0;
ans = gcd(x, y);
for (ll i = 1; i*i <= ans; i++)
{
if (ans%i==0){
Prime[k++] = i;
if (ans / i != i)Prime[k++] = ans / i;
}
}
sort(Prime, Prime + k);
if (k < z)printf("-1\n");
else printf("%lld\n", Prime[k - z]);
}
return 0;
}