HDU 1005 Number Sequence(矩阵快速幂)
2015-08-27 19:48
786 查看
Number Sequence
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 129366 Accepted Submission(s): 31498
Problem Description
A number sequence is defined as follows:
f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
Given A, B, and n, you are to calculate the value of f(n).
Input
The input consists of multiple test cases. Each test case contains 3 integers A, B and n on a single line (1 <= A, B <= 1000, 1 <= n <= 100,000,000). Three zeros signal the end of input and this test case is not to be processed.
Output
For each test case, print the value of f(n) on a single line.
Sample Input
1 1 3 1 2 10 0 0 0
Sample Output
2 5
题目大意:
f(1)=f(2)=1,f(n)=(A*f(n-1)+B*f(n-2))%7,输入A,B和n,输出f(n)。
解题思路:
1 <= n <= 100,000,000,所以不能从3循环到n计算f(n)。f(3)=a+b,f(4)=a+ab+b^2,观察可以发现
所以每次只需要
计算的(n-2)次方。
其实斐波那契数列也属于这种数列,只是a=1,b=1。
参考代码:
#include<bits/stdc++.h> using namespace std; const int INF=0x3f3f3f3f; const int MAXN=1e6+50; struct matrix { int a[2][2]; matrix() { memset(a,0,sizeof(a)); } }; matrix multi(matrix x,matrix y) { matrix ans; for(int i=0; i<2; i++) for(int j=0; j<2; j++) for(int k=0; k<2; k++) ans.a[i][j]=(ans.a[i][j]+x.a[i][k]*y.a[k][j])%7; return ans; } int fastmod(matrix base,int n,int mod) { matrix ans=base; ans.a[0][0]=ans.a[1][1]=1; ans.a[0][1]=ans.a[1][0]=0; while(n) { if(n&1) ans=multi(ans,base); base=multi(base,base); n>>=1; } return (ans.a[0][0]+ans.a[0][1])%mod; } int main() { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif // ONLINE_JUDGE int x,y,n; while(scanf("%d%d%d",&x,&y,&n)&&!(x==0&&y==0&&n==0)) { if(n==1||n==2) { printf("1\n"); continue; } matrix t; t.a[0][0]=x; t.a[0][1]=y; t.a[1][0]=1; t.a[1][1]=0; printf("%d\n",fastmod(t,n-2,7)); } return 0; }
相关文章推荐
- 无需看到你的脸就能认出你——实现Beyond Frontal Faces: Improving Person Recognition Using Multiple Cues
- Android UI设计:AlertDialog
- iOS-UIViewController的UIView生命周期
- iOS:步进UIStepper、滑动块UISlider、开关UISwitch的基本使用
- UITaleViewCell
- uitextfield 当设置为selectedAll 时不让 复制、粘帖那几项自动出来的解决办法
- Building a Space Station(POJ--2031【最小生成树】
- UITableView的编辑
- 08-25 convertView、ViewHolder、MyfruitPractice、divider、Header
- JSF 2 hidden value example
- UIImageView添加圆角图片
- Ngui如何弹出提示消息,并淡出【支持多条】
- 8.8.1 Optimizing Queries with EXPLAIN
- amaze UI animation动画示例
- ValueError: setting an array element with a sequence.
- ValueError: setting an array element with a sequence.
- 如何访问UITextField内的值
- pcDUino 卡刷实现
- HBuilder快捷键
- 【UISlider滑动控件】