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+输出路径)

[ACM]Codeforces Round #534 (Div. 2)

codeforces 653B B. Bear and Compressing(dfs)