Jellyfish and Green Apple-Codeforces Round 902 (Div. 2)

Jellyfish and Green Apple

最小切几刀分苹果
判断-1的条件是最小公倍数/m不是2的倍数,那么苹果不能被一刀切成两块

#include
#define int long long
using namespace std;
int gcd(int a, int b)
{
    if (b == 0)
        return a;
    return gcd(b, a % b);
}
signed main()
{
    int T;cin>>T;
    while(T--){
        int n,m;cin>>n>>m;
        if(n%m==0){
            cout<<0<<endl;
        }else{
            int M=m/gcd(n,m),f=0;
            while(M>1){//判断能不能切
                if(M&1){f=1;break;}
                M/=2;
            }
            if(f==1) {cout<<-1<<endl;continue;}
            n%=m;//可以切,计算最小切的次数
            int ans=n;
            while(n%m){n*=2;n%=m;ans+=n;}
            cout<<ans<<endl;
        }
    }
}

你可能感兴趣的:(c++,算法,开发语言)