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;
}
}
}
}
}