E - E
Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u
Submit Status Practice HDU 6222
Description
A triangle is a Heron’s triangle if it satisfies that the side lengths of it are consecutive integers t−1, t, t+ 1 and thatits area is an integer. Now, for given n you need to find a Heron’s triangle associated with the smallest t bigger
than or equal to n.Input
The input contains multiple test cases. The first line of a multiple input is an integer T (1 ≤ T ≤ 30000) followedby T lines. Each line contains an integer N (1 ≤ N ≤ 10^30).
Output
For each test case, output the smallest t in a line. If the Heron’s triangle required does not exist, output -1.
Sample Input
4 1 2 3 4
Sample Output
4 4 4 4
先打表找下规律,得到数字,规律还是容易发现的:a[n] = 4*a[n-1] - a[n-2],
但就是不好写对吧!!数字太大了,然后我开开心心的用python写完准备提交的时候发现不能用python交.....几乎要被队友打死,然后就换了java,写的特别坎坷,百度了很多用法...很多都忘记掉了,哎,大数运算常常会用到java,python,要好好整理一下(不能再被队友打了!
【通过代码】
import java.math.*;
import java.util.*;
import java.io.*;
public class Main
{
public static void main(String[] args)
{
Scanner cin=new Scanner(new BufferedInputStream(System.in));
BigInteger res[] = new BigInteger[100];
res[0] = BigInteger.valueOf(4L);
res[1] = BigInteger.valueOf(14L);
for (int i = 2;i < 100;i++) {
res[i] = res[i-1].multiply(new BigInteger("4")).subtract(res[i-2]);
}
while (cin.hasNext()) {
int t = cin.nextInt();
for (int ca = 1;ca <= t;ca++) {
BigInteger n = cin.nextBigInteger();
int i = 0;
for (i = 0;i < 100;i++) {
if (n.compareTo(res[i]) != 1) break;
}
System.out.println(res[i]);
}
}
cin.close();
}
}