longlong wa了2次,唉,算是警醒自己吧
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <queue>
#include <map>
using namespace std;
#define INF 1e9
#define maxn
#define rep(i,x,y) for(int i=x;i<=y;i++)
#define mset(x) memset(x,0,sizeof(x))
typedef __int64 ll;
int t;
ll x, y, k;
vector<ll> v;
ll gcd(ll x, ll y){
if(x==0) return y;
return gcd(y%x, x);
}
ll kthprime(ll x){
v.clear();
for(int i=1; i<sqrt(x+0.5); i++){
if(x%i==0){
v.push_back(x/i);
if(v.size()==k)
return v.back();
}
}
for(int i=v.size()-1; i>=0; i--){
if(x/v[i]==v[i]) continue;
v.push_back(x/v[i]);
if(v.size()==k)
return v.back();
}
return -1;
}
int main(){
// freopen("a.txt","r",stdin);
// freopen(".out","w",stdout);
cin>>t;
while(cin>>x>>y>>k){
if(x>y) swap(x,y);
ll ans = kthprime( gcd(x, y) );
cout<<ans<<endl;
}
return 0;
}
/*
DESCRIPTION:
*/