您的位置:首页 > 其它

Educational Codeforces Round 39 (Rated for Div. 2) B. Weird Subtraction Process

2018-03-09 11:39 567 查看
点击打开链接

B. Weird Subtraction Process

time limit per test
1 second

memory limit per test
256 megabytes

input
standard input

output
standard output

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.

Input

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.

Output

Print two integers — the values of
a and
b after the end of the process.

Examples

Input

Copy

12 5


Output
0 1


Input

Copy

31 12


Output
7 12


Note

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. 

题意: 给两个数,A,B,然后 执行一下步骤

第一步:若两个数中任意一个数为0,结束程序,否者执行第二步

第二步:若A>=2*B,那么A-=2*B,然后返回第一步。否者执行第三步

第三部:若B>=2*A,那么B-=2*A,然后返回第一步。否者执行结束程序

思路:模拟 解决。不过A,B数据过大,不能执行减法,分析完上述步骤后,用取余不会超时

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;

int main(){
long long a ,b;
cin >> a >> b;
int resa,resb;
while(1){
//cout << a <<" " <<  b << endl;
if(a == 0 || b == 0)
break;
else {
if(a >= 2*b){
a %= 2*b;
continue;
}
else {
if( b >= 2*a) {
b %= 2*a;
continue;
}
else
break;
}
}
}
cout << a << " " << b << endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐