B. Multiply by 2, divide by 6
题意:
给你一个数N,你可以进行以下两种操作:
N<<=1;
if(N%6==0)N/=6;
问最少需要几次操作才能使得N==1,做不到就输出-1
思路:
算N里有几个因子2,N里有几个因子3,2的因子数是否≤3的因子数,除掉这些因子N等不等于1
代码附:
#pragma GCC optimize("Ofast","inline","-ffast-math")
#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<bits/stdc++.h>
#define int long long
using namespace std;
using ll = long long ;
const int N = 2e5+10;
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int t,n;
cin>>t;
while(t--)
{
cin>>n;
int two=0,three=0;
while(n%2==0)
{
two++;
n>>=1;
}
while(n%3==0)
{
three++;
n/=3;
}
if(n>1||two>three)
{
cout<<-1<<endl;
continue;
}
cout<<three*2-two<<endl;
}
return 0;
}