题目链接:http://codeforces.com/contest/946/problem/B
题意:
You have two variables a and b. Consider the following sequence of actions performed with these variables:
- If a = 0 or b = 0, end the process. Otherwise, go to step 2;
- If a ≥ 2·b, then set the value of a to a - 2·b, and repeat step 1. Otherwise, go to step 3;
- If b ≥ 2·a, then set the value of b to b - 2·a, and repeat step 1. Otherwise, end the process.
题解:直接枚举肯定不行, 但是操作2,3可用取余优化。
代码:
#include <bits/stdc++.h>
using namespace std;
using ll = long long ;
ll a,b;
void f1();
void f2();
void f3();
void f1()
{
if(a==0||b==0)
{
cout << a << " " << b << endl;
exit(0);
}
else
f2();
}
void f2()
{
if(a>=2*b)
{
a%=2*b;
f1();
}
else
f3();
}
void f3()
{
if(b>=2*a)
b%=2*a,f1();
else
{
cout << a << " " << b << endl;
exit(0);
}
}
int main()
{
cin >> a >> b;
f1();
cout << a << " " << b << endl;;
}