题目描述
这个世界上有两种能量,a能量和b能量。
小花作为一个魔法师,每天的工作就是根据现有的能量资源去产生新的能量资源。众所周知的是,由于能量不守恒定律,小花所拥有的能量会越来越多!
产生能量的规则是这样的:小花每一天只能释放两个魔法,第一个是元素克隆,可以将b能量克隆相同的数目,并转变为a能量。第二个是能量跃迁,会根据你现有的a能量和b能量的数目,产生a和b的最大公约数的b能量(不消耗原来的能量)。
小花会严格按照魔法守则里的规定,即每天先做元素克隆,再做能量跃迁。
请问第k天之后,小花拥有a,b能量的数目分别是多少。
输入
第一行一个整数T,代表T组数据。(T<=100)
接下来每行3个数,x,y,k。代表a能量最初有x,b能量最初有y,询问第k天。(1<=x,y,k<=40)
输出
对于每组数据,输出两个数,以空格隔开,代表第k天放完魔法以后,拥有的a,b能量数,占一行。
样例输入
1
12 11 3
样例输出
48 14
考点
- 最大公约数求法
代码片段
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
long long int T,x,y,k,i,j,a,b;
cin>>T;
while(T--)
{
cin>>x>>y>>k;
for(int i=0;i<k;i++)
{
x+=y;
a=x;
b=y;
if(a>b) swap(a,b);
while(b%a!=0)//这里求最大公约数
{
long long int tmp;
tmp=b;
b=a;
a=tmp%a;
}
y+=a;
}
cout<<x<<" "<<y<<endl;
}
}