题目链接:https://nanti.jisuanke.com/t/41383
题解:给你n个同余式,让你求出n之后,然后再斐波那契博弈输出即可
由于不知道哪里出错,C++ WA了,用了Java大数
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
static BigInteger dd;
static BigInteger xx;
static BigInteger yy;
static BigInteger []a = new BigInteger [1005];
static BigInteger []r = new BigInteger [1005];
static BigInteger o = BigInteger.ONE;
static BigInteger z = BigInteger.ZERO;
public static BigInteger[] ex_gcd1(BigInteger a,BigInteger b) {
BigInteger ans; BigInteger[] result=new BigInteger[3];
if(b.compareTo(BigInteger.ZERO) == 0) {
result[0]=a;
result[1]=o;
result[2]=z;
return result;
}
BigInteger [] temp=ex_gcd1(b,a.mod(b));
ans = temp[0];
result[0]=ans;
result[1]=temp[2];
result[2]=temp[1].subtract((a.divide(b)).multiply(temp[2]));
return result;
}
static BigInteger Chinaa(int len) { //n % r[i] = a[i]
BigInteger M=a[0],R=r[0];
for(int i=1; i<len; i++) {
BigInteger []result = ex_gcd1(M,a[i]);
dd = result[0];
xx = result[1];
yy = result[2];
if((R.subtract(r[i])).mod(dd).compareTo(BigInteger.ZERO)!=0) return BigInteger.valueOf(-1);
BigInteger xxx = xx;
xx=(R.subtract(r[i])).divide(dd);
xx = xx.multiply(xxx).mod(a[i]);
R= R.subtract(xx.multiply(M));
M=M.divide(dd).multiply(a[i]);
R= R.mod(M);
}
if(R.mod(M).compareTo(BigInteger.ZERO) == 0) return M;
return (R.mod(M).add(M)).mod(M);
}
static BigInteger []fib = new BigInteger [100];
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int k, cnt = 3;
fib[0] = BigInteger.ZERO;
fib[1] = BigInteger.ONE;
fib[2] = BigInteger.ONE;
for(;cnt <= 75; cnt++) {
fib[cnt] = fib[cnt - 2].add(fib[cnt - 1]) ;
}
k = cin.nextInt();
for(int i = 0; i < k; i++) {
a[i] = cin.nextBigInteger();
r[i] = cin.nextBigInteger();
}
BigInteger n = Chinaa(k);
if(n.compareTo(BigInteger.valueOf(-1)) == 0) {
System.out.println("Tankernb!");
}
else {
int flag = 0;
for(int i = 0; i < cnt; i++) {
if(n.compareTo(fib[i]) == 0) {
System.out.println("Lbnb!");
flag = 1;
break;
}
}
if(flag == 0) {
System.out.println("Zgxnb!");
}
}
}
}