思路:

如图找到推导公式,然后一通乱搞就好了

要开long long,否则红橙作伴

代码:

#include<set>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define ll long long
const int maxn = 3;
const int MOD = 1000000000+7;
const int INF = 0x3f3f3f3f;
using namespace std;
ll m;
struct Mat{
ll s[maxn][maxn];
void init(){
for(int i = 0;i < maxn;i++)
for(int j = 0;j < maxn;j++)
s[i][j] = 0;
}
}; Mat mul(Mat a,Mat b){
Mat t;
t.init();
for(int i = 0;i < maxn;i++){
for(int j = 0;j < maxn;j++){
for(int k = 0;k < maxn;k++){
t.s[i][j] = (t.s[i][j] + a.s[i][k]*b.s[k][j])%m;
}
}
}
return t;
}
Mat pow_mat(Mat p,int n){
Mat ret;
ret.init();
for(int i = 0;i < maxn;i++)
ret.s[i][i] = 1;
while(n){
if(n & 1) ret = mul(ret,p);
p = mul(p,p);
n >>= 1;
}
return ret;
}
int main(){
ll n;
while(scanf("%lld%lld",&n,&m) != EOF){
Mat A,B,T;
memset(T.s,0,sizeof(T.s));
memset(B.s,0,sizeof(B.s));
T.s[0][0] = T.s[1][0] = T.s[0][2] = T.s[2][2] = 1;
T.s[0][1] = 2;
if(n == 1) printf("%lld\n",1%m);
else if(n == 2) printf("%lld\n",2%m);
else{
B.s[0][0] = 2,B.s[1][0] = 1,B.s[2][0] = 1;
A = pow_mat(T,n - 2);
A = mul(A,B);
printf("%lld\n",A.s[0][0]);
}
}
return 0;
}

最新文章

  1. col-md-*,col-xs-*
  2. android 歌词解析
  3. mac osx 启动wireshark闪退
  4. PLSQL_PLSQL调优健康检查脚本SQLHC(案例)
  5. Spark RDD概念学习系列之RDD的操作(七)
  6. Ribbon 窗体的 MDI 子窗体使用 TabbedMDIManager 切换时工具条闪屏问题的解决办法
  7. HW4.45
  8. SA密钥长度、明文长度和密文长度
  9. hdu 5506 GT and set(dfs爆搜)
  10. 最有用的Gulp插件汇总
  11. Android融合推送MixPush SDK集成多家推送平台,共享系统级推送,杀死APP也能收到推送
  12. python五十六课——正则表达式(常用函数之findall)
  13. cocos2d-x JS 开启远程代码调试
  14. Final阶段第1周/共1周 Scrum立会报告+燃尽图 05
  15. Linux系统上查找已安装软件的路径
  16. select SCOPE_IDENTITY()用法
  17. 升级安装windows8.1以后windowsphone8不能启动虚拟机的办法
  18. Floyd判圈算法 Floyd Cycle Detection Algorithm
  19. CommandBehavior.CloseConnection有何作用
  20. 使用snmp4j实现Snmp功能(二)

热门文章

  1. 标准web浏览器的组件
  2. chrome中image图片预留位置的问题
  3. linux下一些常用命令和访问目录
  4. Asp SqlDataSource将数据库数据绑定在 GridView
  5. zabbix安装配置2
  6. EDT改成CST
  7. 170704、springboot编程之CommandLineRunner
  8. 沈阳网络赛J-Ka Chang【分块】【树状数组】【dfs序】
  9. C# 生成四位数字字母混合验证码
  10. Oracle HA 之 SERVICE和DRM实战