http://acm.hdu.edu.cn/showproblem.php?pid=5019
给出X 和Y,求出第K 大的 X 和Y 的公约数。
暴力求出所有公约数
#include <cstdio> #include <cstdlib> #include <cmath> #include <cstring> #include <string> #include <queue> #include <vector> #include<set> #include <iostream> #include <algorithm> using namespace std; #define RD(x) scanf("%d",&x) #define RD2(x,y) scanf("%d%d",&x,&y) #define clr0(x) memset(x,0,sizeof(x)) typedef long long LL; LL gcd(LL a,LL b){ return b == 0? a:gcd(b,a%b);} LL x,y,k; LL p[1000005]; LL cmp(LL a,LL b) { return a > b; } int main() { int _; RD(_); while(_--){ int cnt = 0; scanf("%I64d%I64d%I64d",&x,&y,&k); LL op = gcd(x,y); for(LL i = 1;i < (int)sqrt(op)+1;++i){ if(op%i == 0){ p[cnt++] = i; if(i*i != op){ p[cnt++] = op/i; } } }//cout<<cnt; sort(p,p+cnt,cmp); if(cnt < k){ puts("-1"); } else{ printf("%I64d\n",p[k-1]); } } return 0; }