C

来源:互联网 发布:ubuntu软件中心 编辑:程序博客网 时间:2024/06/17 23:29

题意:给出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;}


原创粉丝点击