【考题·习题详解】数论知识+数学推导

埃匹希斯水晶

题目描述
大家都知道,卡德加是个神奇的法师。 有一天,他发现了一种可以作用在埃匹希斯水晶上的魔法:在左右两个祭坛上放一定量的水晶,然后施放一个法术,左边一堆的水晶数量会变成原来两个祭坛上水晶之和,右边一堆会变成两个祭坛上水晶数量之差。
卡德加现在有两堆水晶,分别有 A 个和 B 个。他打算集中精神连续 释放 N次法术,但不知道最后能拿到多少水晶,于是他找到了要塞指挥官(就是你了)。
输入格式
三个整数 A, B, N ,表?祭坛上刚开始的水晶数,和法术的释放次数。
输出格式
两个数,祭坛上最后的水晶数。输出模 (10e8 + 7)。
样例数据
input

1 2 3
output
6 2

我们从代数上考虑:
初始数字为 a , b a,b a,b,假设 a > b a>b a>b
第一次: a + b a+b a+b a − b a-b ab
第二次: 2 a 2a 2a 2 b 2b 2b
第三次: 2 a + 2 b 2a+2b 2a+2b 2 a − 2 b 2a-2b 2a2b
第四次: 4 a 4a 4a 4 b 4b 4b
第n次(偶数): 2 n / 2 ∗ a 2^{n/2}*a 2n/2a 2 n / 2 ∗ b 2^{n/2}*b 2n/2b
(奇数): 2 n / 2 ∗ ( a + b ) 2^{n/2}*(a+b) 2n/2(a+b) 2 n / 2 ∗ ( a + b ) 2^{n/2}*(a+b) 2n/2(a+b)
因为乘方数较大,我们需要使用快速幂。
因为乘起来的数会爆longlong,我们需要使用快速乘。

#include<bits/stdc++.h>
using namespace std;
#define LL long long

LL a,b,n;
LL const P=10e8+7;

LL mul(LL a,LL b)
{
   
	LL res=0;
	while (b>0)
	
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值