Heron and His Triangle HDU - 6222 

题意:一个三角形的三边长为 t-1,t,t+1  并且面积S为正整数,求>=n的最小t

思路:n<=1e30 。 高精度,1e30≈2^100 。 因此预处理出前100项t就够了

海伦公式求面积,整理有x^2-3y^2=1(t=2*x)

写JAVA的过程中遇到了点问题,这篇博客写得挺好

https://blog.csdn.net/bat67/article/details/79685997

import java.io.*;
import java.util.*;

import java.math.*;


public class Main {
	static final int MAXN=128;
	static BigInteger []x = new BigInteger[MAXN];
	static BigInteger []y = new BigInteger[MAXN];
	static BigInteger []t = new BigInteger[MAXN];
	static void init() {
		x[0]=BigInteger.valueOf(2);
		y[0]=BigInteger.valueOf(1);
		t[0]=BigInteger.valueOf(4);
		BigInteger d=BigInteger.valueOf(3);
		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]));
			t[i]=x[i].multiply(BigInteger.valueOf(2));
		}
	}
	
	public static void  main(String []args) {
		Scanner in=new Scanner(System.in);
		int cas=in.nextInt();
		BigInteger n;
		init();
		while(cas>0) {
			--cas;
			n=in.nextBigInteger();
			for(int i=0;i<MAXN;++i) {
				if(n.compareTo(t[i])!=1) {
					System.out.println(t[i]);
					break;
				}
			}
		}
	}
}