本文主要是介绍Twice Equation(递推+java大数),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题 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;}} }
}
这篇关于Twice Equation(递推+java大数)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!