Skip to content

Instantly share code, notes, and snippets.

@saisumit
Created March 13, 2017 10:04
Show Gist options
  • Select an option

  • Save saisumit/5484f5178124f71c94c03329bcaca76e to your computer and use it in GitHub Desktop.

Select an option

Save saisumit/5484f5178124f71c94c03329bcaca76e to your computer and use it in GitHub Desktop.
/* When Panda is Life !
_,add8ba,
,d888888888b,
d8888888888888b _,ad8ba,_
d888888888888888) ,d888888888b,
I8888888888888888 _________ ,8888888888888b
__________`Y88888888888888P"""""""""""baaa,__ ,888888888888888,
,adP"""""""""""9888888888P""^ ^""Y8888888888888888I
,a8"^ ,d888P"888P^ ^"Y8888888888P'
,a8^ ,d8888' ^Y8888888P'
a88' ,d8888P' I88P"^
,d88' d88888P' "b,
,d88' d888888' `b,
,d88' d888888I `b,
d88I ,8888888' ___ `b,
,888' d8888888 ,d88888b, ____ `b,
d888 ,8888888I d88888888b, ,d8888b, `b
,8888 I8888888I d8888888888I ,88888888b 8,
I8888 88888888b d88888888888' 8888888888b 8I
d8886 888888888 Y888888888P' Y8888888888, ,8b
88888b I88888888b `Y8888888^ `Y888888888I d88,
Y88888b `888888888b, `""""^ `Y8888888P' d888I
`888888b 88888888888b, `Y8888P^ d88888
Y888888b ,8888888888888ba,_ _______ `""^ ,d888888
I8888888b, ,888888888888888888ba,_ d88888888b ,ad8888888I
`888888888b, I8888888888888888888888b, ^"Y888P"^ ____.,ad88888888888I
88888888888b,`888888888888888888888888b, "" ad888888888888888888888'
8888888888888698888888888888888888888888b_,ad88ba,_,d88888888888888888888888
88888888888888888888888888888888888888888b,`"""^ d8888888888888888888888888I
8888888888888888888888888888888888888888888baaad888888888888888888888888888'
Y8888888888888888888888888888888888888888888888888888888888888888888888888P
I888888888888888888888888888888888888888888888P^ ^Y8888888888888888888888'
`Y88888888888888888P88888888888888888888888888' ^88888888888888888888I
`Y8888888888888888 `8888888888888888888888888 8888888888888888888P'
`Y888888888888888 `888888888888888888888888, ,888888888888888888P'
`Y88888888888888b `88888888888888888888888I I888888888888888888'
"Y8888888888888b `8888888888888888888888I I88888888888888888'
"Y88888888888P `888888888888888888888b d8888888888888888'
^""""""""^ `Y88888888888888888888, 888888888888888P'
"8888888888888888888b, Y888888888888P^
`Y888888888888888888b `Y8888888P"^
"Y8888888888888888P `""""^
`"YY88888888888P'
^""""""""'
*/
using namespace std ;
#include <bits/stdc++.h>
#define REP(i, a, b) for (int i = a; i <= b; i++)
#define FOR(i, n) for (int i = 0; i < n; i++)
#define foreach(it, ar) for ( typeof(ar.begin()) it = ar.begin(); it != ar.end(); it++ )
#define PI 3.1415926535897932385
#define uint64 unsigned long long
#define Int long long
#define int64 long long
#define all(ar) ar.begin(), ar.end()
#define pb push_back
#define ff first
#define ss second
#define bit(n) (1<<(n))
#define Last(i) ( (i) & (-i) )
#define sq(x) ((x) * (x))
#define mp make_pair
const Int Mi = 1e9 +7 ;
struct TMatr{
int n;//length and width of matrix. cause the matrix is quadratic it's the same
Int A[2][2];
TMatr operator * (TMatr b);
};
TMatr res; // A temperory matrix used for multiplication
TMatr TMatr::operator * (TMatr b)//operator of multiplying matrixes
{
res.n = n;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++){
res.A[i][j] = 0;
for (int k = 0; k < n; k++)
res.A[i][j] = (res.A[i][j] + (this->A[i][k] * b.A[k][j]) % Mi) % Mi; //res[i][j] = sum(a[i][k]*b[k][j]), k = 0..n-1
}
return res;
}
Int exp( TMatr base , Int po )
{
TMatr Ans;
Ans.n = 2 ; // what is the order of the matrix
Ans.A[0][0] = Ans.A[1][1] = 1 ;
Ans.A[0][1] = Ans.A[1][0 ] = 0 ;
while( po )
{
if( po & 1) Ans = Ans * base ;
base = base * base ;
po >>=1 ;
}
return Ans.A[0][1] ;
}
Int po ( Int b , Int p )
{
Int ans = 1 ;
while( p )
{
if( p & 1 )
ans = ( ans*b )%Mi;
b = (b*b)%Mi ;
p = p/2 ;
}
return ans ;
}
int main ( )
{
int t ;
scanf("%d",&t) ;
TMatr Fib;
Fib.n = 2 ;
Fib.A[0][0] = Fib.A[1][0] = Fib.A[0][1] = 1 ;
Fib.A[1][1] = 0 ;
while( t-- )
{
Int N ;
scanf("%lld",&N) ;
if( N == 1 ){ cout<<0 <<endl; continue ; }
Int sp = exp( Fib , N + 2 ) ;
//cout<<sp<<endl;
Int fp = po( 2, N ) ;
cout<<( (fp-sp)%Mi+Mi) %Mi <<endl ;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment