import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.math.BigInteger; public class Main { public static void main (String args[]) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String input; StringBuilder sb=new StringBuilder(10000); while((input=br.readLine())!=null) { BigInteger A[][]={{new BigInteger("1"),new BigInteger("1")},{new BigInteger("1"),new BigInteger("0")}}; sb.append(matrixpower(A,Integer.parseInt(input))[1][0]+"\n"); } System.out.print(sb); } public static BigInteger[][] matrixmultiplication(BigInteger[][] A,BigInteger[][] B) { BigInteger resultantmatrix[][]=new BigInteger[2][2]; resultantmatrix[0][0] = A[0][0].multiply(B[0][0]).add(A[0][1].multiply(B[1][0])); resultantmatrix[0][1] = A[0][0].multiply(B[0][1]).add(A[0][1].multiply(B[1][1])); resultantmatrix[1][0] = A[1][0].multiply(B[0][0]).add(A[1][1].multiply(B[1][0])); resultantmatrix[1][1] = A[1][0].multiply(B[0][1]).add(A[1][1].multiply(B[1][1])); return resultantmatrix; } public static BigInteger[][] matrixpower(BigInteger[][] A,int power) { if(power==0) { BigInteger matrixA[][]={{new BigInteger("1"),new BigInteger("0")},{new BigInteger("0"),new BigInteger("1")}}; return matrixA; } else if(power % 2==0) { BigInteger C[][]=matrixpower(A, power/2); return matrixmultiplication(C,C); } else { return matrixmultiplication(A,matrixpower(A, power-1)); } } }
0 comments: