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