历届试题 斐波那契

原创 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)   对于给定的整数...
  • lc0817
  • lc0817
  • 2015-03-28 21:35
  • 2143

斐波那契

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

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

2011年华美乐章《和?琴韵墨章》音乐会即将浓情上演

款款丹青,袅袅琴韵,在穿越千年的亘古情怀中悠然共舞,《和?琴韵墨章》音乐会将于2011年1月11日在星海音乐厅掀起美丽面纱,奏响美妙音律。中国画家陈永锵与国乐演奏家方锦龙等一众古琴名家首度跨界合作,挥...

UVA 10603 - Fill BFS~

有3个没有刻度的水壶,容量分别为a,b,c(均不超过200的正整数)。初始时候前两个水壶空,第三个装满了水。每次可以从一个水壶往另一个水壶倒水,直到其中一个水壶倒空或者另一个水壶倒满。为了使某个水壶恰...

利用BP神经网络对语音数据进行分类

最近给学院老师的一篇论文帮忙改进BP神经网络,由于最后要发表论文,神经网络必须自己手写,搞了几个晚上,总算把基础的BP神经网络写出来,接下来再把老师的改进算法实现就ok了。(当然那代码不能公开了)我这...

uva10603

题目大意: 给定三个水杯的容量和所要达到的目标水量,或者找不到目标水量就一直递减到找到。最后输出你最少需要倒到别的杯子的水量是多少。思路: 自己的代码TLE了,如下。 使用Bfs,还需要用到vi...

UVa10603

隐式图的遍历 采用广度优先搜索的算法,从当前节点front扩展出所有可能的节点。扩展就是从一个杯子的水往另外一个杯子里面倒。 首先需要判断一下可以倒多少水,从第i个杯子往第j个杯子里面倒,如果第i...

UVa 10603 - Fill,经典倒水问题+隐式图搜索+dfs

题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=110&page=show_p...

二叉搜索树

关于二叉树的基本操作请转到我的另一片博客: http://blog.csdn.net/qq_30091945/article/details/77531651概念Binary Search Tree...

【2017百度之星】HDU 6114 Chess 【组合数取模,Lucas定理】

题意:分析一下,就是C(n,m),(n>m) ,利用组合数的递推关系或者用Lucas定理即可得到答案。 当然也可以用记忆话搜索。
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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