A. Game 23 这道题第一次竟然做错了

A. Game 23
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
Polycarp plays “Game 23”. Initially he has a number n and his goal is to transform it to m. In one move, he can multiply n by 2 or multiply n by 3. He can perform any number of moves.

Print the number of moves needed to transform n to m. Print -1 if it is impossible to do so.

It is easy to prove that any way to transform n to m contains the same number of moves (i.e. number of moves doesn’t depend on the way of transformation).

Input
The only line of the input contains two integers n and m (1≤n≤m≤5⋅108).

Output
Print the number of moves to transform n to m, or -1 if there is no solution.

Examples
inputCopy
120 51840
outputCopy
7
inputCopy
42 42
outputCopy
0
inputCopy
48 72
outputCopy
-1
Note
In the first example, the possible sequence of moves is: 120→240→720→1440→4320→12960→25920→51840. The are 7 steps in total.

In the second example, no moves are needed. Thus, the answer is 0.

In the third example, it is impossible to transform 48 to 72.

#include <bits/stdc++.h>
 
using 
namespace std;
 
typedef long long LL;
 
int main()
{
    int n, m;
    cin >> n >> m;
    if (m % n != 0)
        cout << -1 << endl;
    else
    {
        int cnt = 0;
        int t = m / n;
        while (t % 2 == 0)
            t /= 2, cnt++;
        while (t % 3 == 0)
            t /= 3, cnt++;
        if (t != 1)
            cout << -1 << endl;
        else
            cout << cnt << endl;
    }
 
 
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43870649/article/details/88748130