-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathh.cpp
50 lines (46 loc) · 1.45 KB
/
h.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/************************************************************************/
/* Name: Towfiqul Islam */
/* uva id: 448714 */
/* email id: towfiq.106@gmail.com */
/* institute: IIUC */
/* address: Chittagong, Bangladesh */
/* */
/************************************************************************/
#include<bits/stdc++.h>
using namespace std;
#define mod 1000000007
long long int fibonacci(long long int n)
{
long long fib[2][2]= {{1,1},{1,0}},ret[2][2]= {{1,0},{0,1}},tmp[2][2]= {{0,0},{0,0}};
int i,j,k;
while(n)
{
if(n&1)
{
memset(tmp,0,sizeof tmp);
for(i=0; i<2; i++) for(j=0; j<2; j++) for(k=0; k<2; k++)
tmp[i][j]=(tmp[i][j]%mod+ret[i][k]%mod*fib[k][j]%mod)%mod;
for(i=0; i<2; i++) for(j=0; j<2; j++) ret[i][j]=(tmp[i][j]+)%mod;
}
memset(tmp,0,sizeof tmp);
for(i=0; i<2; i++) for(j=0; j<2; j++) for(k=0; k<2; k++)
tmp[i][j]=(tmp[i][j]%mod+fib[i][k]%mod*fib[k][j]%mod)%mod;
for(i=0; i<2; i++) for(j=0; j<2; j++) fib[i][j]=tmp[i][j];
n/=2;
}
return (ret[0][1]);
}
int main ()
{
long long int n,t,i;
cin>>t;
for(i=1;i<=t;i++)
{
scanf("%lld",&n);
// if(n<=2)
// printf("Case %lld: %lld\n",i,((fibonacci(n+1)*8)%mod));
// else
printf("Case %lld: %lld\n",i,fibonacci(n));
}
return 0;
}