问题描述
斐波那契数列大家都非常熟悉。它的定义是:
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.util.*;
public class Main {
public static int f2(int n){
//表示第n项
if(n==1||n==2)
return 1;
else if(n>2){
return f2(n-1)+f2(n-2);
}
return 0;
}
public static int f1(int n){
//表示前n项的和
if(n==1)
return 1;
else if(n==2)
return 2;
else if(n>2){
return f1(n-1)+f2(n);
//返回前n-1项的和+第n项
}
return 0;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
int p=sc.nextInt();
f1(n);
//求n项和的递归函数
f2(m);
//直接递归求第n项
System.out.println((f1(n)
转载请注明原文地址: https://ju.6miu.com/read-19539.html