历届试题 斐波那契

原创 2017年03月05日 18:24:07

问题描述
  斐波那契数列大家都非常熟悉。它的定义是:

  f(x) = 1 …. (x=1,2)
  f(x) = f(x-1) + f(x-2) …. (x>2)

  对于给定的整数 n 和 m,我们希望求出:
  f(1) + f(2) + … + f(n) 的值。但这个值可能非常大,所以我们把它对 f(m) 取模。
  公式如下

  但这个数字依然很大,所以需要再对 p 求模。
输入格式
  输入为一行用空格分开的整数 n m p (0 < n, m, p < 10^18)
输出格式
  输出为1个整数,表示答案
样例输入
2 3 5
样例输出
0
样例输入
15 11 29
样例输出
25


代码如下:

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

public class Main {
    static int MAX = Integer.MAX_VALUE;
    static ArrayList<BigInteger> f = new ArrayList<BigInteger>();
    static ArrayList<BigInteger> sum = new ArrayList<BigInteger>();

    public static BigInteger Factor(int i){
        BigInteger known;
        if ( i < f.size()){
            return f.get(i);
        }
        known = f.get(i-1).add(f.get(i-2));
        f.add(known);
        return known;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        f.add(BigInteger.ONE);
        f.add(BigInteger.ONE);
        sum.add(BigInteger.ONE);
        sum.add(new BigInteger("2"));
        int n = in.nextInt();
        int m = in.nextInt();
        BigInteger p = new BigInteger(in.next());
        int max = Math.max(n, m);
        int start = f.size();
        for ( int i = start ; i < max ; i++){
            BigInteger fab = Factor(i);
            BigInteger s = sum.get(i-1).add(fab);
            sum.add(s);
        }
        BigInteger result = sum.get(n-1).remainder(f.get(m-1));     
        result = result.remainder(p);
        System.out.print(result.toString());

        in.close();
    }
}
版权声明:本文为博主原创文章,若需转载,请注明http://blog.csdn.net/qq_30091945

相关文章推荐

第五届蓝桥杯试题——斐波那契

标题:斐波那契 斐波那契数列大家都非常熟悉。它的定义是: f(x) = 1 .... (x=1,2) f(x) = f(x-1) + f(x-2) .... (x>2) 对于给定的整数 n 和 ...
  • chuyueh
  • chuyueh
  • 2016年02月27日 12:45
  • 2239

斐波那契

题目要求: 标题:斐波那契     斐波那契数列大家都非常熟悉。它的定义是:     f(x) = 1                    .... (x=1,2)     f(x) =...

蓝桥杯: 斐波那契

问题描述   斐波那契数列大家都非常熟悉。它的定义是:   f(x) = 1 .... (x=1,2)   f(x) = f(x-1) + f(x-2) .... (x>2)   对于给定的整数...
  • lc0817
  • lc0817
  • 2015年03月28日 21:35
  • 2258

面试题九斐波那契和青蛙跳台阶

题目: 要求输入一个整数n,请你输出斐波那契数列的第n项。 如下: 输入: 一个正整数n 输出: 斐波那契数列的第n项 解题思路: 有两种,是通过递归来实现,这种方法最...

【动态规划】 Google面试题 爬楼梯问题 斐波那契问题的多种解法

Google 曾询问应征者 :有N阶楼梯 ,你每次只能爬1或2 阶 楼梯;能有多少种方法 对这个问题进行分析:  假设N阶楼梯的爬法有A(N)种;由于每次爬1或2阶 因此 A(N)= A(N-1)...

斐波那契函数

  • 2015年07月13日 07:22
  • 869B
  • 下载

斐波那契递归.cpp

  • 2012年06月05日 20:59
  • 236B
  • 下载

输入一个数,查找该位置上的斐波那契数

需求:1、输入一个数n,计算输出斐波那契数列的第n个值。(斐波那契数:一个数等于前两个数的和) import java.util.Scanner; public class Fibonacci ...

fib斐波那契出列

  • 2012年05月16日 16:37
  • 5.5MB
  • 下载

C语言斐波那契序列三种方法

  • 2013年02月25日 16:00
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:历届试题 斐波那契
举报原因:
原因补充:

(最多只允许输入30个字)