题意:就是给你一个值n,要你找一个大于等于n的值t,且t-1,t,t+1构成的三角形面积为整数。
题解:
解法有两种:1.暴力打表找规律 2.用佩尔方程,这里我用的是佩尔方程。
由于已知三条边就可以用欧拉函数算出面积的公式。
看公式可以得出要让S为整数,必须等于。
得出
可以看出这个方程很像佩尔方程。
设
则
佩尔方程解的递推公式:
由于数据过大就直接用java大数打了。
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
static BigInteger [] x=new BigInteger[1000];
static BigInteger [] y=new BigInteger[1000];
static BigInteger [] sum=new BigInteger[1000];
static BigInteger d = BigInteger.valueOf(3);
static void count() {
x[1]=BigInteger.valueOf(2);
y[1]=BigInteger.valueOf(1);
sum[1]=BigInteger.valueOf(4);
for(int i = 2 ; i < 200 ; i++) {
x[i] = x[i-1].multiply(x[1]).add(d.multiply(y[i-1]).multiply(y[1]));
y[i] = x[i-1].multiply(y[1]).add(y[i-1].multiply(x[1]));
sum[i] = x[i].multiply(BigInteger.valueOf(2));
}
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int T = input.nextInt();
BigInteger n;
count();
while(T!=0) {
T--;
n = input.nextBigInteger();
for(int i = 1 ; i < 200 ; i++) {
if(n.compareTo(sum[i])!=1) {
System.out.println(sum[i]);
break;
}
}
}
}
}