hdu 4291 A Short problem 矩阵+循环
来源:互联网 发布:传奇盛世转生数据 编辑:程序博客网 时间:2024/05/18 02:45
#include <cstdio>#include <cstring>#include <cmath>#include <iostream>#include <algorithm>using namespace std;#define LL long longLL mod;LL a[3]={183120,222222224,1000000007};struct matrix{ LL f[2][2];};matrix mul(matrix a,matrix b){ LL i,j,k; matrix c; memset(c.f,0,sizeof(c.f)); for(k=0;k<2;k++) { for(i=0;i<2;i++) { if(!a.f[i][k])continue; for(j=0;j<2;j++) { if(!b.f[k][j])continue; c.f[i][j]=(c.f[i][j]+a.f[i][k]*b.f[k][j]%mod)%mod; } } } return c;}matrix pow_mod(matrix a,LL b){ matrix s; memset(s.f,0,sizeof(s.f)); for(LL i=0;i<2;i++) s.f[i][i]=1; while(b) { if(b&1) s=mul(s,a); a=mul(a,a); b=b>>1; } return s;}int main(){ LL n; while(cin>>n) { if(n==0) { cout<<0<<endl; continue; } LL i,j,k; matrix e,g; e.f[0][0]=3;e.f[0][1]=1; e.f[1][0]=1;e.f[1][1]=0; for(i=0;i<3;i++) { mod=a[i]; g=pow_mod(e,n-1); n=(g.f[0][0]==0?mod:g.f[0][0]);//注意n=0的情况 } cout<<n%mod<<endl; } return 0;}/* 矩阵 |g[n-1] g[n-2]|*|3 1|=|g[n] g[n-1]| |1 0| gg(x)=g(g(x)); 由于用g(x)求gg(x),g(x)不能对1e9+7取余,导致g(x)很大,所以不能直接求 输出结果可发现g(x),gg(x)都是循环的,暴力求出循环。 在%1e9+7的基础上g(g(g(x)))=g(g(g(x))+222222224), 在%222222224的基础上g(g(x))=g(g(x)+183120); 用mod={183120,222222224,1e9+7}循环三次矩阵乘法即可*/
下面是招循环的代码:
#include <cstdio>#include <iostream>using namespace std;#define LL __int64//const int mod=1e9+7;const LL mod=222222224;int main(){LL i,a,b,g;a=1,b=0;for(i=1;;i++){g=(3*a+b)%mod;b=a;a=g;if(a==1&&b==0){cout<<i<<endl;break;}}return 0;}//222222224,//183120,
- hdu 4291 A Short problem 矩阵+循环
- HDU 4291 A Short problem(矩阵快速幂取模求循环节)
- HDU 4291 A Short problem(矩阵快速幂+循环节)
- HDU 4291 A Short problem // 矩阵快速幂, 循环节
- HDU 4291-A Short problem-循环节+矩阵快速幂
- HDU 4291 A Short problem 矩阵,多重函数求循环节
- hdu 4291 A Short problem 矩阵快速幂,找循环节
- hdu 4291 A Short problem(矩阵+取模循环节)
- HDU 4291 A Short problem (2012成都网络赛,矩阵快速幂+循环节)
- HDU 4291 A Short problem(矩阵快速幂+循环节)
- HDU——4291A Short problem(矩阵快速幂+循环节)
- 【HDU】4291 A Short problem 矩阵快速幂
- hdu 4291 A Short problem 打表找规律&矩阵快速幂
- hdu 4291 A Short problem(矩阵快速幂)
- HDU-4291 A Short problem(矩阵快速幂)
- hdu 4291 A Short problem(矩阵快速幂)
- hdu 4291A Short problem
- hdu 4291 A Short problem
- 设计模式六大原则(4):接口隔离原则
- Linux下安装Apache服务器
- 多线程2:原子操作 Interlocked系列函数
- Hadoop: the definitive guide 第三版 拾遗 第十二章 之Hive架构
- 六级520,这么吉祥的数字纪念一下
- hdu 4291 A Short problem 矩阵+循环
- 设计模式六大原则(5):迪米特法则
- 原生JavaScript技巧大收集
- HDU 4691 Front compression(后缀数组 LCA)
- 《Qt编程的艺术》——8.1.2 模型类(Model Classes)
- flash 的鼠标事件详解
- Windows Phone 开发教学系列视频之四天玩转Windows Phone下载
- 设计模式六大原则(6):开闭原则
- 正被停用的激活上下文不是最近激活的