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

来源:互联网 发布:迅龙数据恢复软件 mac 编辑:程序博客网 时间:2024/05/18 01:14

标题:斐波那契

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

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) 取模。
公式参见【图1.png】

但这个数字依然很大,所以需要再对 p 求模。

【数据格式】
输入为一行用空格分开的整数 n m p (0 < n, m, p < 10^18)
输出为1个整数

例如,如果输入:
2 3 5
程序应该输出:
0

再例如,输入:
15 11 29
程序应该输出:

25

源码如下:

import java.util.Scanner;public class F {public static void main(String[] args) {Scanner sc=new Scanner(System.in);long n=sc.nextLong();long m=sc.nextLong();long p=sc.nextLong();long first = 0;for(long i=1;i<=n;i++)first+=f(i);long second=first%f(m);System.out.println(second%p);}static long f(long x){if(x<=0)return 0;else if(x==1||x==2)return 1;elsereturn f(x-1)+f(x-2);}}




1 6