所以最终的想法就是:计算出质因子 2 的个数a,和计算出质因子 3 的个数 b, 如果
a
>
b
a > b
a>b 则无法得到 1,否则要操作的次数最少为
(
b
−
a
)
×
2
+
a
(b - a) \times 2 + a
(b−a)×2+a
代码如下
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<int> vi;
#define debug printf("(hao)")
#define all(x) x.begin(), x.end()
#define rep(i, a, b) for (int i = (a); i < (b); i++)
#define clr(a, v) memset(a, v, sizeof(a))
//主代码函数
void solve() {
int n, a = 0, b = 0;
scanf("%d", &n);
while (n % 2 == 0) n /= 2, a++; //计算质因子 2 的个数
while (n % 3 == 0) n /= 3, b++; //计算质因子 3 的个数
if (n != 1) printf("-1\n"); //如果质因子有其他
else if (a > b) printf("-1\n"); //如果 2 个数比三多,则无法得到 1
else printf("%d\n", (b - a) * 2 + a);
}
// #define LOCAL
int main() {
std::ios::sync_with_stdio(false);
#ifdef LOCAL
freopen("test.in", "r", stdin);
freopen("test.out", "w", stdout);
#endif
int T;
scanf("%d", &T);
while (T--)
solve();
return 0;
}