Twice Equation(遞推+java大數)
阿新 • • 發佈:2019-01-29
問題 L: Twice Equation
題目描述
For given L, find the smallest n no smaller than L for which there exists an positive integer m for which 2m(m + 1) = n(n + 1).輸入
This problem contains multiple test cases. The first line of a multiple input is an integer T (1 ≤ T < 1000) followed by T input lines. Each line contains an integer L (1 ≤ L < 10190輸出
For each given L, output the smallest n. If available n does not exist, output −1.樣例輸入
3
1
4
21
樣例輸出
3
20
119
先用的c++打出前幾項然後找出了一個遞推的規律fn=f(n-1)*6-f(n-2)+2,然後就是直接用java大數直接while模擬遞推就可以。
import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner cin = new Scanner(System.in); int t; t=cin.nextInt(); while (t--!=0){ BigInteger n,a,b,c; n=cin.nextBigInteger(); if(n.compareTo(BigInteger.valueOf(3))<=0) { System.out.println("3"); continue; } if(n.compareTo(BigInteger.valueOf(20))<=0) { System.out.println("20"); continue; } a=BigInteger.valueOf(3); b=BigInteger.valueOf(20); while(true) { c=b.multiply(BigInteger.valueOf(6)).subtract(a).add(BigInteger.valueOf(2)); if(c.compareTo(n)>=0) { System.out.println(c); break; } a=b; b=c; } } } }