Description
Format
Input
包含两个正整数A,B。
1 ≤ A,B ≤ 1000000000。
Output
一个整数,即最少操作次数,如果不存在方案,则输出-1
Samples
输入数据 1
3 4
Copy
输出数据 1
3
Copy
Hint
第一次:3 / 3 = 1
第二次:1 + 1 = 2
第三次:2 * 2 = 4
#include<bits/stdc++.h>
using namespace std;
long long x,a,m,b;
short int sd[1000000001];
void dfs(long long x,long long y){
if(x+x<=b) if(sd[x+x]==0||(sd[x+x]>y+1)){
sd[x+x]=y+1;
dfs(x+x,y+1);
}
if(x*x<=b) if(sd[x*x]==0||(sd[x*x]>y+1)){
sd[x*x]=y+1;
dfs(x*x,y+1);
}
if(sd[1]==0||(sd[1]>y+1)){
sd[1]=y+1;
dfs(1,y+1);
}
if(sd[0]==0||(sd[0]>y+1)){
sd[0]=y+1;
dfs(0,y+1);
}
}
int main(){
cin>>a>>b;
if(a==b){
cout<<0;
return 0;
}
dfs(a,0);
if(sd[b]==0){
cout<<-1;
}
else{
cout<<sd[b];
}
return 0;
}