Processing math: 100%

Solução Informática - Nível Iniciante - Semana 12

Solução por Leonardo Paes

Uma observação importante é que 6=23. Isso significa que o número de 3 que dividem n não muda, ou seja, é invariável. A única coisa que pode mudar é o numero de 2, pois podemos multiplicar o número por 2.

Então, para resolvermos o problema, basta contarmos a quantidade de vezes que podemos dividir n por 2 e n por 3. Se a quantidade de 3 for maior ou igual a quantidade de 2, basta multiplicarmos o número por 2 nessa quantidade de vezes e depois dividirmos o número resultante por 6 até ele virar 1. Caso contrário, não conseguimos aumentar o número de 3, portanto é impossível chegarmos a 1, nesse caso imprimimos 1.

Código de exemplo:

#include <bits/stdc++.h>
using namespace std;
int main(){
ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
int t;
cin >> t;
while(t--){
int n, qtd2 = 0, qtd3 = 0;
cin >> n;
while(n%2 == 0){
n /= 2;
qtd2++;
}
while(n%3 == 0){
n /= 3;
qtd3++;
}
if(n!=1 or qtd2>qtd3) cout << -1 << "\n";
else{
cout << qtd3-qtd2 + qtd3 << "\n";
}
}
return 0;
}