HDU 5505 GT and numbers

解题报告:

AA大于BB那么显然无解。

考虑把AABB分解质因数。

BB存在AA没有的质因数也显然无解。

对于某一个AA的质因数的次数。为了加速接近BB,它一定是每次翻倍,最后一次的时候把剩下的加上。

那么答案就是最小的kk使得2^{k}*A_{num} \geq B_{num}2kAnumBnum

最后把每个质因数的答案max起来即可。

感觉本场比赛没有trick(雾~),我就打算加入一个很经典的trick:

BB可以刚好等于2^{63}263,这样就要开unsigned long long。

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define LL __int64
LL gcd(LL a,LL b)
{
    if(a%b)
        return gcd(b,a%b);
    return b;
}
int main()
{
    LL t;
    scanf("%lld",&t);
    while(t--)
    {
        LL n,m;
        scanf("%I64d%I64d",&n,&m);
        LL cnt=0;
        while(n!=m)
        {
            if(m%n)
            {
                printf("-1\n");
                break;
            }
            LL k=gcd(n,m/n);
            if(k==1)
            {
                printf("-1\n");
                break;
            }
            n*=k;
            cnt++;
        }
        if(m==n)
            printf("%I64d\n",cnt);
    }
    return 0;
}

你可能感兴趣的:(HDU 5505 GT and numbers)