/*
标题:斐波那契
斐波那契数列大家都非常熟悉。它的定义是:
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
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 2000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。
public class Fibonacci
{
static int sum = 0;
static int f;
static int n;
static int m;
static int p;
public static void main(String[] args)
{
//输入n,m,p
Scanner s1 = new Scanner(System.in);
Scanner s11= new Scanner(s1.nextLine());
int arr[] = new int[3];
int len = 0;
while(s11.hasNext())
{
arr[len] = s11.nextInt();
len++;
}
n = arr[0];
m = arr[1];
p = arr[2];
for(int i=1; i<=n; i++)
{
sum = sum + fun(i);
}
System.out.println((sum%fun(m))%p);
}
public static int fun(int i)
{
// f(x) = 1 (x=1,2)
if(i == 1 || i==2)
{
f = 1;
}
// f(x) = f(x-1) + f(x-2) ..(x>2)
else{
f = fun(i-1) + fun(i-2);
}
return f;
}
}
标题:斐波那契
斐波那契数列大家都非常熟悉。它的定义是:
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
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 2000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。
*/
思路:此题用递归即可解决,f(1)、f(2)为出口
public class Fibonacci
{
static int sum = 0;
static int f;
static int n;
static int m;
static int p;
public static void main(String[] args)
{
//输入n,m,p
Scanner s1 = new Scanner(System.in);
Scanner s11= new Scanner(s1.nextLine());
int arr[] = new int[3];
int len = 0;
while(s11.hasNext())
{
arr[len] = s11.nextInt();
len++;
}
n = arr[0];
m = arr[1];
p = arr[2];
for(int i=1; i<=n; i++)
{
sum = sum + fun(i);
}
System.out.println((sum%fun(m))%p);
}
public static int fun(int i)
{
// f(x) = 1 (x=1,2)
if(i == 1 || i==2)
{
f = 1;
}
// f(x) = f(x-1) + f(x-2) ..(x>2)
else{
f = fun(i-1) + fun(i-2);
}
return f;
}
}