博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu4565之矩阵快速幂
阅读量:6787 次
发布时间:2019-06-26

本文共 1872 字,大约阅读时间需要 6 分钟。

 

So Easy!

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 813    Accepted Submission(s): 226

Problem Description
A sequence S
n is defined as:
Where a, b, n, m are positive integers.┌x┐is the ceil of x. For example, ┌3.14┐=4. You are to calculate S
n.
You, a top coder, say: So easy! 
 

 

Input
There are several test cases, each test case in one line contains four positive integers: a, b, n, m. Where 0< a, m < 2
15, (a-1)
2< b < a
2, 0 < b, n < 2
31.The input will finish with the end of file.
 

 

Output
For each the case, output an integer S
n.
 

 

Sample Input
2 3 1 2013 2 3 2 2013 2 2 1 2013
 

 

Sample Output
4 14 4

详解在这:

 

另外Cn=(a+sqrt(b))^n+(a-sqrt(b))^n =>Cn*(a+sqrt(b) + a-sqrt(b))=(a+sqrt(b))^(n+1)+(a-sqrt(b))^(n+1)+(a*a-b)*(a+sqrt(n))^(n-1)+(a*a-b)*(a-sqrt(b))^(n-1)=C(n+1) + (a*a-b)C(n-1) =>C(n+1)=2a*Cn+(b-a^2)*C(n-1)

 

#include
#include
#include
#include
#include
#include
#include
#include
#include
#define INF 99999999using namespace std;const int MAX=10;__int64 array[2][2],sum[2][2];void MatrixMult(__int64 a[2][2],__int64 b[2][2],__int64 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 a,__int64 b,__int64 k,__int64 mod){ array[0][0]=a%mod,array[0][1]=(b%mod+mod)%mod; array[1][0]=1,array[1][1]=0; 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 (a*sum[0][0]+2*sum[0][1])%mod;}int main(){ __int64 a,b,n,m; while(scanf("%I64d%I64d%I64d%I64d",&a,&b,&n,&m)!=EOF){ if(n == 0)printf("I64d\n",1%m); else if(n == 1)printf("%I64d\n",2*a%m); else printf("%I64d\n",Matrix(2*a,b-a*a,n-1,m)); } return 0;}

 

 

转载地址:http://qhigo.baihongyu.com/

你可能感兴趣的文章
linux系统硬件配置查看方法 [转]
查看>>
播放视频android学习笔记---44_在线视频播放器,网络视频解析器,SurfaceView 控件使用方法...
查看>>
IT人 不能一辈子靠技术生存[转]
查看>>
WPF控件深拷贝:序列化/反序列化
查看>>
转换分配C++ explicit关键字
查看>>
0035算法笔记——【分支限界法】布线问题
查看>>
程序员编程艺术:三之三续、求数组中给定下标区间内的第K小(大)元素
查看>>
Android开源框架Afinal第一篇——揭开圣女的面纱
查看>>
ActionContextCleanUp作用
查看>>
java生成excel并可以导出
查看>>
php实战第二十四天
查看>>
N皇后问题
查看>>
英文版Ubuntu安装Fcitx输入法
查看>>
MySQL 常用语句
查看>>
MySql数据库恢复(*frm)文件
查看>>
初窥Linux 之 文件权限
查看>>
android手机自带浏览器无法识别apk文件
查看>>
HNCU1323:算法2-1:集合union (线性表)
查看>>
inpyt 按钮变透明 边框
查看>>
js 退后一步并刷新,window.history.back(-1);这个只能后退一步不能刷新,
查看>>