問題文から, \((3^{k}+1)\cdot 3^{30-k} = n\) を満たす \(k\) を求めればよい. つまり, \(3^{30-k} = n - 3^{30}\) を満たす \(k\) を求める. \(i := 30-k\) とおいて, \(k \in [1,30]\) のとき \(i \in [0,30)\) . これは全探索可能.
使っている記号,マクロ等 "https://ecsmtlir.hatenablog.com/entry/2022/12/23/131925"
int main() {
ll n, m, k, q;
cin >> n;
ll p = 1;
rep(i,30){
p *= 3;
}
ll x = 1;
rep(i,30){
ll k = 30 - i;
if(x == n - p){ // x = 3^i
cout << k << endl;
return 0;
}
x *= 3; // rem : x *= 3 のタイミング
}
cout << -1 << endl;
return 0;
}