Codeforces Round #653 (Div. 3) B. Multiply by 2, divide by 6 (数学)
Posted lr599909928
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #653 (Div. 3) B. Multiply by 2, divide by 6 (数学)相关的知识,希望对你有一定的参考价值。
-
题意:有一个数(n),每次操作可以使(n*=2)或(n/=6)(如果能被整除),求最少操作次数使得(n=1),如果不满足,输出(-1).
-
题解:我们只要看(n)的质因子即可,如果要满足条件,那么它的质因子只能含有(2)和(3),并且(2)的次数不大于(3)的次数.直接去找(2)和(3)的次数即可.
(写了个质因数分解被hack了,呜呜呜) -
代码:
int t; int n; int main() { ios::sync_with_stdio(false);cin.tie(0); cin>>t; while(t--){ cin>>n; int cnt1=0; int cnt2=0; while(n%2==0){ n/=2; cnt1++; } while(n%3==0){ n/=3; cnt2++; } if(n!=1 || cnt1>cnt2){ cout<<-1<<endl; } else{ cout<<2*cnt2-cnt1<<endl; } } return 0; }
以上是关于Codeforces Round #653 (Div. 3) B. Multiply by 2, divide by 6 (数学)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #653 (Div. 3)ABCDE1
Codeforces Round #653 (Div. 3)D. Zero Remainder Array
Codeforces Round #653 (Div. 3) B. Multiply by 2, divide by 6 (数学)
Codeforces Round #436 E. Fire(背包dp+输出路径)