hdu 4291 2012成都赛区网络赛 矩阵快速幂 ***
2015-08-20 15:22
661 查看
分析:假设g(g(g(n)))=g(x),x可能非常大,但是由于mod 10^9+7,所以可以求出x的循环节
求出x的循环节后,假设g(g(g(n)))=g(x)=g(g(y)),即x=g(y),y也可能非常大,但是由x的循环节可以求出y的循环节
所以最终结果只要进行矩阵快速幂即可求出
循环节
求出x的循环节后,假设g(g(g(n)))=g(x)=g(g(y)),即x=g(y),y也可能非常大,但是由x的循环节可以求出y的循环节
所以最终结果只要进行矩阵快速幂即可求出
循环节
#include<stdio.h> const long long MOD=222222224;//第一次是MOD=1000000007 找出循环节是222222224 //第二次是MOD=222222224,找出循环节183120 int main() { long long a,b; a=1; b=3; for(int i=1;;i++) { if(a==0&&b==1) { printf("%d\n",i); break; } long long c=3*b+a; c%=MOD; a=b; b=c; } return 0; }
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<queue> #include<algorithm> #include<map> #include<iomanip> #define INF 99999999 using namespace std; const int mod1=1000000007;//求结果的循环节 const int mod2=222222224;//第1层的循环节,假设g(g(g(n)))=g(x),即mod2是x的循环节 const int mod3=183120;//第2层的循环节假设g(g(g(n)))=g(g(y)),即mod3是y的循化节 __int64 array[2][2],sum[2][2]; void MatrixMult(__int64 a[2][2],__int64 b[2][2],int mod){ __int64 c[2][2]={0}; for(int i=0;i<2;++i){ for(int j=0;j<2;++j){ for(int k=0;k<2;++k){ c[i][j]+=a[i][k]*b[k][j]; } } } for(int i=0;i<2;++i){ for(int j=0;j<2;++j)a[i][j]=c[i][j]%mod; } } __int64 Matrix(__int64 k,int mod){ array[0][0]=3,array[1][1]=0; array[0][1]=array[1][0]=1; sum[0][0]=sum[1][1]=1; sum[0][1]=sum[1][0]=0; while(k){ if(k&1)MatrixMult(sum,array,mod); MatrixMult(array,array,mod); k>>=1; } return sum[0][0]; } int main(){ /*__int64 a=0,b=1; for(int i=2;;++i){//求循环节 a=(b*3+a)%mod2; a=a^b; b=a^b; a=a^b; if(a == 0 && b == 1){cout<<i-1<<endl;break;}//i-1=222222224 }*/ __int64 n; while(scanf("%I64d",&n)!=EOF){ if(n>=2)n=Matrix(n-1,mod3); if(n>=2)n=Matrix(n-1,mod2); if(n>=2)n=Matrix(n-1,mod1); printf("%I64d\n",n); } return 0; }
相关文章推荐
- TCP与UDP的区别
- android-async-http使用
- HttpClient v4.5 简单抓取主页数据
- iOS系统网络抓包方法
- iOS tcpdump抓包方法
- iOS系统网络抓包方法
- arm wifi驱动编译及无线wifi网络管理
- android操作通过http与服务器通信
- 卷积神经网络
- CNN卷积神经网络新想法
- 网络流建模的一般方法
- Apache HttpClient4.3.x忽略证书验证
- 配置VMware Workstation 主机模式下让虚拟机上网设置详细
- VM虚拟机Centos6.4网络配置
- 图解HTTP
- 黑马程序员——java基础_网络编程
- ionic开发-怪癖001(http请求 android下无法正常运行)
- 异步获取网络图片Bitmap
- Wireshark和TcpDump抓包分析心得
- HttpURLConnection用法详解