GT and numbers
题意:
给出两个数NNN和MMM。 NNN每次可以乘上一个自己的因数变成新的NNN。 求最初的NNN到MMM至少需要几步。 如果永远也到不了输出−1-1−1。
#include <string>
#include <vector>
#include <algorithm>
#include <numeric>
#include <set>
#include <map>
#include <queue>
#include <iostream>
#include <sstream>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstring>
#include <cctype>
#include <cassert>
#include <limits>
#include <functional>
#define Lson l,mid,rt<<1
#define Rson mid+1,r,rt<<1|1
#define LL long long
#define INF 0x3f3f3f3f
#define INFL 0x3f3f3f3f3f3f3f3fLL
using namespace std;
int gcd(LL x,LL y)
{
return x%y ? gcd(y,x%y) : y;
}
int main()
{
int T;
LL N,M;
scanf("%d",&T);
while(T--)
{
scanf("%lld%lld",&N,&M);
int cnt = 0;
while(N != M)
{
if(M % N)
{
printf("-1\n");
break;
}
int k = gcd(M/N,N);
if(k == 1)
{
printf("-1\n");
break;
}
N *= k;
cnt++;
}
if(N == M)
printf("%d\n",cnt);
}
return 0;
}