题意:给出a,b,k,求出k-thgcd,我的理解是第k大的公因子
思路:先求出c=gcd(a,b),显然c为第一大公因子,第k大的公因子即c的第k大因子
复杂度:当a,b=10^12,时c也为10^12,找出全部因子为O(根号n),即(10^6)左右
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
long long gcd(long long a,long long b)
{
return b?gcd(b,a%b):a;
}
vector<long long>v;
int main()
{
long long a,b,k,t;
scanf("%lld",&t);
while(t--)
{
v.clear();
scanf("%lld%lld%lld",&a,&b,&k);
long long c=gcd(a,b);
for(long long i=1;i*i<=c;i++)
{
if(c%i == 0)
{
v.push_back(i);
if(i*i != c)//防止放入两个i
v.push_back(c/i);
}
}
sort(v.begin(), v.end());
if(k>v.size()) printf("-1\n");
else printf("%lld\n",v[v.size()-k]);
}
return 0;
}