mfcheer

hdu-5019

版权声明:转载请注明出处。 https://blog.csdn.net/u014427196/article/details/40454323

第二次做这个题了...

#include <iostream>
#include <algorithm>
#include <cmath>
#include <stdio.h>

using namespace std;

long long gcd(long long a, long long b)
{
    long long r = a%b;
    while (r)
    {
        a = b;
        b = r;
        r = a%b;
    }
    return b;
}

long long arr[200010] = { 0 };

int main()
{
    int t;
    scanf ("%d",&t);
    while (t--)
    {
        long long a, b;
        long long  c;
        scanf("%I64d%I64d%I64d",&a,&b,&c);
        long long d = gcd(a, b);
        int counter = 0;
        long long  i;

        for (i = 1; i*i <=d ; ++i)
        {
            if (d%i == 0)
            {
                arr[counter++] = i;
                if (i*i!=d)
                {
                    arr[counter++] = d / i;
                }
            }
        }
        sort(arr, arr + counter);

        if (c > counter)
        {
            printf("-1\n");
        }
        else
        {
            printf("%I64d\n",arr[counter - c]);
        }
    }
    return 0;
}
← 全部文章

留言