Analysis
简单的模拟题。一个有用的结论:把a和b同时除以它们的最大公约数k答案不变。这个结论应当是显然的,可以理解为把k个物品合并为一件大的物品。这样一直模拟下来出解是很快的。
Accepted Code
var
a,b,k,t:longint;
function gcd(a,b:longint):longint;
var
tmp:longint;
begin
while b mod a<>0 do
begin
tmp:=a;
a:=b mod a;
b:=tmp;
end;
gcd:=a;
end;
begin
read(a,b);
if (a=0) or (b=0) then
begin
writeln(0);
exit;
end;
k:=0;
repeat
if odd(a+b) then
begin
writeln(-1);
exit;
end;
t:=gcd(a,b);
a:=a div t;
b:=b div t;
if a>=b then
begin
a:=a-b;
b:=b+b;
end
else
begin
b:=b-a;
a:=a+a;
end;
inc(k);
until (a=0) or (b=0);
writeln(k);
end.