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.
Initially the values of a and b are positive integers, and so the process will be finite.
You have to determine the values of a and b after the process ends.
The only line of the input contains two integers n and m (1 ≤ n, m ≤ 1018). n is the initial value of variable a, and m is the initial value of variable b.
Print two integers — the values of a and b after the end of the process.
12 5
0 1
31 12
7 12
Explanations to the samples:
- a = 12, b = 5 a = 2, b = 5 a = 2, b = 1 a = 0, b = 1;
- a = 31, b = 12 a = 7, b = 12.
代码:
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<cmath> 5 #include<algorithm> 6 #include<cstdlib> 7 using namespace std; 8 typedef long long ll; 9 const int maxn=1e5+10; 10 #define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); 11 int main(){ 12 ll a,b; 13 ios; 14 cin>>a>>b; 15 while(1){ 16 if(a==0||b==0) break; 17 if(a>=2*b){ 18 a=a%(2*b); 19 } 20 else if(b>=2*a){ 21 b=b%(2*a); 22 } 23 else break; 24 } 25 cout<<a<<" "<<b<<endl; 26 }