特判a==0||b==0的情况
1.如果a+b为奇数,显然无解;
2.数对a/gcd(a,b),b/gcd(a,b)的答案显然是和a,b一样的,因为加减中都有gcd(a,b)倍,
1.如果a+b为奇数,显然无解;
2.数对a/gcd(a,b),b/gcd(a,b)的答案显然是和a,b一样的,因为加减中都有gcd(a,b)倍,
不断循环下去,重复1,2操作,直到a==0||b==0或是无解
代码如下:
#include <cstdio>
#include <algorithm>
using namespace std;
int gcd(int a, int b)
{
while(b) b ^= a ^= b ^= a %= b;
return a;
}
int main()
{
int a, b, c, t, tt;
int step = 0;
scanf("%d%d", &a, &b);
if(a > b) swap(a, b);
if(!a || !b)
{
printf("0");
return 0;
}
while(1)
{
if((a+b) & 1)
{
printf("-1");
return 0;
}
step++;
c = gcd(a, b);
a /= c, b /= c;
b -= a, a <<= 1;
if(!a || !b) break;
if(a > b) swap(a, b);
}
printf("%d", step);
return 0;
}