HDU ACM 5019 Revenge of GCD

来源:互联网 发布:台湾妹网络自拍 编辑:程序博客网 时间:2024/05/21 17:53

分析:只需要求出最大公约数,然后枚举最大公约数的因子,把他们保存起来在求第K大的;因为是最大公约数的因子必然是两个数的因子。另外循环变量i和个数cnt都要声明为__int64,否则出错。

#include<iostream>#include<algorithm>using namespace std;__int64 gcd(__int64 x,__int64 y){__int64 r;while(y){r=x%y;x=y;y=r;}return x;}__int64 f[1000005];int main(){int T;__int64 X,Y,K,_gcd,i,cnt;scanf("%d",&T);while(T--){scanf("%I64d %I64d %I64d",&X,&Y,&K);_gcd=gcd(X,Y);cnt=0;for(i=1;i*i<=_gcd;i++){if(_gcd%i==0){if(i*i==_gcd)f[cnt++]=i;else{f[cnt++]=i;f[cnt++]=_gcd/i;}}}if(K>cnt)puts("-1");else{sort(f,f+cnt);printf("%I64d\n",f[cnt-K]);}}    return 0;}


0 0
原创粉丝点击