bigfib java

来源:互联网 发布:网络电视全球在线 编辑:程序博客网 时间:2024/06/10 16:18
import java.math.BigInteger;import java.util.Scanner;public class Main {static class Matrix {BigInteger a, b, c, d;int moder;Matrix(BigInteger a, BigInteger b, BigInteger c, BigInteger d) {this.a = a;this.b = b;this.c = c;this.d = d;}Matrix(Matrix mat) {this(mat.a, mat.b, mat.c, mat.d);}Matrix mul(Matrix rhs) {Matrix ret= new Matrix(BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO);ret.a = a.multiply(rhs.a).add(b.multiply(rhs.c));ret.b = a.multiply(rhs.b).add(b.multiply(rhs.d));ret.c = c.multiply(rhs.a).add(d.multiply(rhs.c));ret.d = c.multiply(rhs.b).add(d.multiply(rhs.d));return ret;}Matrix pow(int n) {Matrix ret=new Matrix(this);if (n <= 1)return this;if (n % 2 == 0)return ret.mul(ret).pow(n / 2);elsereturn ret.mul(ret).pow(n / 2).mul(ret);}};static BigInteger fibonacci(int n) {if (n == 0)return BigInteger.ZERO;Matrix matrix0 = new Matrix(BigInteger.ONE, BigInteger.ONE, BigInteger.ONE, BigInteger.ZERO);return matrix0.pow(n - 1).a;}public static void main(String[] args) {Scanner stdin = new Scanner(System.in);while(stdin.hasNext()) {System.out.println(fibonacci(stdin.nextInt()));}stdin.close();}}


 

0 0