A
来源:互联网 发布:如何制作淘宝水印 编辑:程序博客网 时间:2024/05/29 11:11
In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. For example, the first ten terms of the Fibonacci sequence are:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …An alternative formula for the Fibonacci sequence is.Given an integer n, your goal is to compute the last 4 digits of Fn.
Input
The input test file will contain multiple test cases. Each test case consists of a single line containing n (where 0 ≤ n ≤ 1,000,000,000). The end-of-file is denoted by a single line containing the number −1.
Output
For each test case, print the last four digits of Fn. If the last four digits of Fn are all zeros, print ‘0’; otherwise, omit any leading zeros (i.e., print Fn mod 10000).
Sample Input
099999999991000000000-1
Sample Output
0346266875
/*直接套快速幂模板,求矩阵的n次幂int ans=1;while(n){ if(n&1) ans*=x; x*=x; n>>=1;就是此模板啦,将相应的ans 和x换成矩阵就行*/#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;int n,a[2][2],ans[2][2];void mul(int a[2][2],int b[2][2]){ int temp[2][2]; memset(temp,0,sizeof temp); for(int i=0;i<2;i++){ for(int j=0;j<2;j++){ for(int k=0;k<2;k++){ temp[i][j]=(temp[i][j]+a[i][k]*b[k][j])%10000; } } } for(int i=0;i<2;i++){ for(int j=0;j<2;j++){ b[i][j]=temp[i][j]; } }}int main(){ while(scanf("%d",&n)!=EOF){ if(n==-1) return 0; a[0][0]=a[0][1]=a[1][0]=1; a[1][1]=0; ans[0][0]=ans[1][1]=1; ans[0][1]=ans[1][0]=0;//相当于ans=1,初始化为单位矩阵 while(n){ if(n&1) mul(a,ans);//此过程相当于求ans=ans*a; mul(a,a);//相当于求a=a*a; n>>=1; } printf("%d\n",ans[0][1]); }}
阅读全文
0 0
- a
- a
- a
- a
- a
- a
- a
- a
- a
- a
- a
- a
- a
- A
- A*
- a
- A
- a
- labview滤波
- word创建PDF文件
- [Leetcode] 345. Reverse Vowels of a String 解题报告
- mac 的intellij idea 不能进行编辑
- 基于文件验证的vsftpd虚拟用户
- A
- 安卓开发 As使用SVN
- android 多功能自定义画板控件(用于解决特定需求)
- 关于group by 在sql中的应用记录
- 深入学习js之浅谈作用域(变量提升)
- [Revit二次开发]在WPF显示revit的三维视图
- 如何使用ARMS配置tengine的日志监控
- Android项目集成AndResGuard资源混淆两种方式
- Oracle Imp和exp 命令