上一道题比这道难吧

上一道题比这道难吧

题目很短,一目了然!!!

如下:

(a+sqrt(b))^n=xn+yn*sqrt(b)

很明显左式的结果一定可以表达为右式的形式,

例如:当 a=5, b=2,n=1  时,  X1=5,Y1=1 , 当 n=2 时,  X2=27,Y2=10

是不是很简单?已知 a,b,n 的值 , 你是否能求出  Xn, Yn  的值呢?

Input

输入只有一行,有三个整数分别为 a,b,n(1≤a,b,n≤12)的值,用空格分隔。

Output

输出两个整数占一行,用空格分隔,代表  Xn, Yn​ 的值。

Input

5 2 1

Output

5 1

解题思路:我写这道题的想法是找到每一项的x与y跟上一项的关系。
当 n = 1 时 左边的式子为(a + sqrt(b)) 
x = a, y = 1;
当 n = 2 时
实际就是将左边式子乘上一个 a + sqrt(b)
那么x的值就会变成a*a+sqrt(b)*sqrt(b),y的值就变成了a+a
再看一下 n = 3 .....
当我们观察一下每一次的x与y与上一次的x与y,我们可以发现
每一次的x值实际是上一次的x乘a加上一次的y乘b
(因为x是常数,所以每一次的x首先有一部分是上一次的常数乘a,
另一部分则来源于上一次的sqrt(b)乘sqrt(b)也就是上一次的y乘b) 
而每一次的y则是上一次的y乘a加上一次的x的值) 
(y为sqrt(b)的系数,所以一部分是上一次的sqrt(b)的系数y乘a,
另一部分则是上一次的常数x乘sqrt(b))

#include<stdio.h>

#include<string.h>

#include<math.h>

#include<algorithm>

using namespace std;

int main()
{
	int a, b, n;
	scanf("%d %d %d",&a, &b, &n);
	long long int xx[15] = {0};
	long long int yy[15] = {0};
	xx[1] = a;
	yy[1] = 1;
	for(int i = 2; i <= n; i++)
	{
		xx[i] = xx[i-1] * a + yy[i - 1] * b;
		
                yy[i] = yy[i - 1] * a + xx[i - 1];
	}

	printf("%lld %lld\n", xx[n], yy[n]);
}

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值