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 0 9 999999999 1000000000 -1 Sample Output
#include<cstdio> #include<cstring> using namespace std; typedef struct Matrix { int s[2][2]; } M; M Multiply(M a,M b) { M c; memset(c.s,0,sizeof(c.s)); for(int i=0;i<2;i++) { for(int j=0;j<2;j++) { for(int k=0;k<2;k++) { c.s[i][j]+=a.s[i][k]*b.s[k][j]%10000; } } } return c; } M pow(M a,int n) { M b; if(n==0) { memset(b.s,0,sizeof(b.s)); b.s[0][0]=1; b.s[1][1]=1; return b; } else { M k=pow(a,n/2); if(n%2==1) return Multiply(Multiply(k,k),a); else return Multiply(k,k); } } int main() { int n; while(scanf("%d",&n),n!=-1) { M a; a.s[0][0]=1; a.s[0][1]=1; a.s[1][0]=1; a.s[1][1]=0; M b=pow(a,n); printf("%d\n",b.s[0][1]%10000); } return 0; }
0346266875
Fibonacci
最新推荐文章于 2024-01-10 20:43:40 发布