hdu5019(gcd性质水题)

来源:互联网 发布:宾馆网络电视怎么打开 编辑:程序博客网 时间:2024/06/13 23:20


首先求第k大的gcd,辗转相处的gcd是第一大的,并且第几大的一定是gcd的因数,所以只要乱搞找出即可


#include<cstdio>#include<algorithm>#include<cmath>#define ll long longusing namespace std;ll a,b,k;ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}int main(){int T;scanf("%d",&T);while (T--){scanf("%lld%lld%lld",&a,&b,&k);ll g=gcd(a,b),ans=-1,sq=(int)sqrt(g);k--;if (!k)ans=g;for (int i=2;i<=sq;i++)if (g%i==0){k--;if (!k) ans=g/i;}if (k)for (int i=sq;i>=1;i--)if (g%i==0){if (sq*sq==g) continue;k--;if (!k) ans=i;}printf("%lld\n",ans);}return 0;}


0 0
原创粉丝点击