大数 线性递推 Twice Equation

题目链接:https://nanti.jisuanke.com/t/A1541

题意:给你一个L,求不小于L的最小的N,使的存在正整数m满足2m(m+1)=n(n+1)

分析:这题一看就没什么思路,就索性直接根据2m(m+1)=n(n+1)打表,来找规律,可以发现前面几项就是3,20,119,696,4059

尝试一下找规律,如果自己不会找就直接用求线性递推式系数公式来暴力枚举,成功得到递推公式是f(n)=6f(n-1)-f(n-2)+2;

import java.io.*;
import java.util.*;
import java.math.*;

public class Main {
    public static void main(String args[]) {
        Scanner cin = new Scanner(System.in);
        int T=cin.nextInt();
        BigInteger[] fn=new BigInteger [1500];
        BigInteger two=new BigInteger("2");
        BigInteger six=new BigInteger("6");
        BigInteger L;
        fn[1]=new BigInteger("3");fn[2]=new BigInteger("20");
        for(int i=3;i<=1200;i++) {
            fn[i]=fn[i-1].multiply(six).subtract(fn[i-2]).add(two);
        }
        for(int i=0;i<T;i++) {
            L=cin.nextBigInteger();
            for(int j=1;j<=1200;j++) {
                if(L.compareTo(fn[j])<=0) {
                    System.out.println(fn[j]);
                    break;
                }
            }
        }
    }
}

 

转载于:https://www.cnblogs.com/qingjiuling/p/11360168.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值