题意:求方程 满足n<=N的最大正整数解n
思路: 本来想c++写的,感觉可能要爆ll, 因为解出来的仅仅是 4*n+3 相应的值 , 不能保证是4*n+3的倍数
写了个JAVA , 1A
import java.io.*;
import java.math.*;
import java.util.*;
public class Main {
static final int MAXN=400;
static BigInteger []x = new BigInteger[MAXN];
static BigInteger []y = new BigInteger[MAXN];
static void init(){
x[0]=BigInteger.valueOf(7);
y[0]=BigInteger.valueOf(1);
BigInteger d=BigInteger.valueOf(48);
for(int i=1;i<MAXN;i++) {
x[i]=x[0].multiply(x[i-1]).add(y[i-1].multiply(d));
y[i]=y[0].multiply(x[i-1]).add(x[0].multiply(y[i-1]));
}
}
public static void main(String []args) {
init();
Scanner in = new Scanner(System.in);
BigInteger n;
while(true) {
n=in.nextBigInteger();
if(n.compareTo(BigInteger.valueOf(0))==0) break;
n=n.multiply(BigInteger.valueOf(4)).add(BigInteger.valueOf(3));
BigInteger ansn=BigInteger.valueOf(-1);
BigInteger ansx=BigInteger.valueOf(-1);
for(int i=0;i<MAXN;i++) {
/*System.out.println(x[i] + " " + n);*/
if(x[i].compareTo(n)==1) break;
if(((x[i].subtract(BigInteger.valueOf(3))).mod(BigInteger.valueOf(4))).compareTo(BigInteger.valueOf(0))==0) {
ansn=x[i];
ansx=y[i];
}
}
System.out.println((ansn.subtract(BigInteger.valueOf(3))).divide(BigInteger.valueOf(4))+" "+ansx);
}
}
}