题目
样例输入1
120 51840
样例输出1
7
样例输入2
42 42
样例输出2
0
样例输入3
48 72
样例输出3
-1
思路
我暴力求解了,将算法问题变成了数学问题。
如果m == n,直接返回0;
如果m与n不能整除,或者不是2或者3的倍数,显然输出-1;
然后将m/n的结果循环除以6(相当于除以2又除以3,速度会快一点叭),3,2,如果结果为1,直接输出num,否则不能从m到n。
写完发现有人又dfs,感觉dfs是动态规划...但暴力求解会快一点的吧...
代码
#include <iostream>
using namespace std;
int ans(int n, int m)
{
if (m == n) return 0;
int a = m / n;
if (m % n != 0) return -1;
else if (a % 3 != 0 && a % 2 != 0) return -1;
else
{
int sum = 0;
while (a % 6 == 0)
{
sum += 2;
a /= 6;
}
while (a % 3 == 0)
{
sum++;
a /= 3;
}
while (a % 2 == 0)
{
sum++;
a /= 2;
}
if (a != 1)return -1;
return sum;
}
}
int main()
{
int n, m;
cin >> n >> m;
cout << ans(n, m) << endl;
//system("Pause");
}