import java.math.*;
import java.util.*;
public class Main {
public static BigInteger __ng=BigInteger.valueOf(-1);
public static BigInteger __0=BigInteger.valueOf(0);
public static BigInteger __1=BigInteger.valueOf(1);
public static BigInteger __2=BigInteger.valueOf(2);
public static BigInteger __3=BigInteger.valueOf(3);
public static BigInteger __4=BigInteger.valueOf(4);
public static BigInteger __5=BigInteger.valueOf(5);
public static BigInteger __6=BigInteger.valueOf(6);
public static BigInteger __7=BigInteger.valueOf(7);
public static BigInteger __8=BigInteger.valueOf(8);
public static BigInteger __9=BigInteger.valueOf(9);
public static BigInteger __10=BigInteger.valueOf(10);
public static BigInteger __100=BigInteger.valueOf(100);
public static BigInteger __10000=BigInteger.valueOf(10000);
public static int siz=3;
public static void Mul(BigInteger[][] a,BigInteger[][] b) { // a = a*b
BigInteger[][] res=
{{__0,__0,__0},{__0,__0,__0},{__0,__0,__0}};
for(int i=0;i<siz;i++) {
for(int j=0;j<siz;j++) {
for(int k=0;k<siz;k++) {
res[i][j]=res[i][j].add(a[i][k].multiply(b[k][j]));
}
}
}
for(int i=0;i<siz;i++) {
for(int j=0;j<siz;j++) {
a[i][j]=res[i][j];
}
}
}
public static void Pow(BigInteger[][] a,long b) { // a = a^b
BigInteger[][] res= new BigInteger[][]{{__1,__0,__0},{__0,__1,__0},{__0,__0,__1}};
while(b>0) {
if((b&1)>0) {
Mul(res,a);
}
b>>=1;
Mul(a,a);
}
for(int i=0;i<siz;i++) {
for(int j=0;j<siz;j++) {
a[i][j]=res[i][j];
}
}
}
public static void Print(BigInteger[][] a) { // print martix
System.out.println("__________________________________out");
for(int i=0;i<siz;i++) {
for(int j=0;j<siz;j++) {
System.out.print(a[i][j]+" ");
}
System.out.println();
}
System.out.println();
}
public static void main(String args[]) {
Scanner cin=new Scanner(System.in);
int t=cin.nextInt();
int cas=0;while(t-->0) {
long n=cin.nextLong();
BigInteger[][] ans=
{{__1,__1,__1},{__0,__0,__0},{__0,__0,__0}};
BigInteger[][] tmp=
{{__1,__0,__0},{__10.add(__6),__1,__0},{__1.subtract(__10.add(__6)),__1,__1}};
Pow(tmp,n);
Print(tmp);
Mul(ans,tmp);
Print(ans);
System.out.println("Case #"+(++cas)+": "+ans[0][0]);
}
}
}
java BigInteger 大数版矩阵快速幂模板
最新推荐文章于 2022-09-19 09:30:38 发布