首页 > 其他 > 详细

1022. Fib数列

时间:2019-05-17 16:05:34      阅读:94      评论:0      收藏:0      [点我收藏+]

Description

定义Fib数列:1,1,2,3,5,8,13,1,1,2,3,5,8,13,…

求第NN项除以20102010的余数

Input Format

输入仅一行,为一个整数NN

Output Format

输出仅一行,为第NN项除以20102010的余数

Sample Input

3

Sample Output

2

Limits:

对于70%的数据 N1,000,000N≤1,000,000

对于100%的数据 N210,000,000,000

 

解:

  此题数据范围太大,long到第99位就吼不住了,数据类型需要用BigInteger;

  对于时间也有限制,于是抛弃了递归,使用for循环解决,仍达不到要求;

  再次审题,对2010进行取余,难道是2010年出的题?还是说有什么规律可循的捷径?

  于是依次打印了从1到50000的结果,对结果分析后发现每隔2040个数字就循环一次,于是将n对2040取余,得解。

import java.math.BigInteger;
import java.util.Scanner;

public class Main {


    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();
        n = n % 2040;
        System.out.println(fib3(n).divideAndRemainder(new BigInteger("2010"))[1]);

    }


    static BigInteger fib3(long n) {
        BigInteger n1 = new BigInteger("0");
        BigInteger n2 = new BigInteger("1");
        for (long i = 0; i < n; i++) {
            BigInteger temp = n1;
            n1 = n2.add(n1);
            n2 = temp;
        }
        return n1;
    }

}

 

1022. Fib数列

原文:https://www.cnblogs.com/chenglc/p/10881778.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!