12 Jellyfish and Green Apple
Jellyfish and Green Apple 数论
将苹果平均的分给人,可以将苹果一分为二,问你最少分多少次。
首先把能分的都分掉就是n%=m,其次操作数是很好想的,就一直*2并且%m,直到n==0,关于这题有难度的就是n,m分不了的情况。
设想一下,成功的情况,也就是这个n一直在乘2最后能==m。那么转换一下就是m/某个苹果数=2的幂次,果数是一直在改变的,也就是只要存在就好。这个数是gcd(n,m)
#include<bits/stdc++.h>
#define int long long
using namespace std;
int lowbit(int x){return x&(-x);}
bool check(int x){
if(lowbit(x)!=x)return true;
else return false;
}
void solve(){
int n,m;
cin>>n>>m;
n=n%m;
if(n==0){
cout<<0<<"\n";
return;
}
int x=m/__gcd(n,m);
if(check(x)){
cout<<-1<<"\n";
return;
}
int ans=0;
while(n){
ans+=n;
n*=2;
n%=m;
}
cout<<ans<<"\n";
}
signed main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int t=1;
cin>>t;
for(int i=1;i<=t;i++)solve();
return 0;
}