Skip to content

Commit 2f0c8f8

Browse files
committed
boj_11444_피보나치수6
1 parent 410d1f1 commit 2f0c8f8

1 file changed

Lines changed: 44 additions & 0 deletions

File tree

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
5+
public class boj_11444_피보나치수6 {
6+
static long MOD =1_000_000_007;
7+
static long[][] origin ={{1,1},{1,0}};
8+
9+
public static void main(String[] args) throws IOException{
10+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
11+
12+
long [][]A ={{1,1},{1,0}};
13+
14+
long N = Long.parseLong(br.readLine());
15+
System.out.println(pow(A,N-1)[0][0]);
16+
}
17+
18+
static long[][] pow (long[][]A,long exp){
19+
if(exp==1||exp==0){
20+
return A;
21+
}
22+
23+
long[][] ret = pow(A, exp/2);
24+
25+
ret = multiply(ret,ret);
26+
27+
if(exp%2==1L){
28+
ret=multiply(ret,origin);
29+
}
30+
return ret;
31+
}
32+
33+
static long[][] multiply(long[][]o1,long[][]o2){
34+
long[][]ret=new long[2][2];
35+
36+
37+
ret[0][0] = ((o1[0][0] * o2[0][0]) + (o1[0][1] * o2[1][0])) % MOD;
38+
ret[0][1] = ((o1[0][0] * o2[0][1]) + (o1[0][1] * o2[1][1])) % MOD;
39+
ret[1][0] = ((o1[1][0] * o2[0][0]) + (o1[1][1] * o2[1][0])) % MOD;
40+
ret[1][1] = ((o1[1][0] * o2[0][1]) + (o1[1][1] * o2[1][1])) % MOD;
41+
42+
return ret;
43+
}
44+
}

0 commit comments

Comments
 (0)