13.斐波那契数

斐波那契数

时间限制: 1 s

空间限制: 128000 KB

题目等级 : 黄金 Gold

题解

查看运行结果

题目描述 Description

小X是个聪明的孩子,他记得斐波那契数列f(n)中前1000个数。不过由于学业的压力,他无法记得每一个数在数列中的位置。

他现在知道斐波那契数列中的一个数f(x)模P后的值N(即f(x) mod P=N)以及x可能的最大值M,如果再对于斐波那契数列中每一个数都模P,他想知道这个数可能出现在第几个。不过小X还要做作业呢,这个问题就交给你由编程来解决了。

输入描述 Input Description

一行,共3个整数,第一个数为N,第二个数为P,第三个数为x可能的最大值M,三个数以空格隔开。

输出描述 Output Description

一个整数,满足f(i) mod P = N的最小的i,如果不存在则输出-1。

样例输入 Sample Input

3 7 5

样例输出 Sample Output

4

数据范围及提示 Data Size & Hint

对于20%的数据,保证0<M≤50

对于50%的数据,保证0<M≤100

对于70%的数据,保证0<M≤500

对于100%的数据,保证0<M≤1000,0≤N

,P为素数且2

5。

代码:

#include

using namespace std;

#include

int n,p,m;

int f[1001];

int main()

{

scanf("%d%d%d",&n,&p,&m);

f[1]=1;f[2]=1;

if(n==1)

{

cout<<1<<endl;

return 0;

}

int flag=0;

for(int i=3;i<=m;++i)

{

f[i]=(f[i-1]+f[i-2])%p;

if(f[i]==n)

{

printf("%d\n",i);

return 0;

}

}

if(flag==0)

{

printf("-1\n");

return 0;

}

return 0;

}

时间: 2024-08-05 07:07:08

13.斐波那契数的相关文章

分治法--二分查找、乘方、斐波那契数

1.二分查找 常见错误: 死循环:循环体外的初始化条件,与循环体内的迭代步骤, 都必须遵守一致的区间规则,也就是说,如果循环体初始化时,是以左闭右开区间为边界的,那么循环体内部的迭代也应该如此.如果两者不一致,会造成程序的错误. 溢出:middle = left + (right - left) / 2 终止条件:一般来说,如果左闭右闭,则left<=right: 如果一开一闭,则left<right: 关键看left能不能等于right,而且要考虑实际情况,有时不能这样简单终结,会出现死循环

算法笔记_001:斐波那契数的多种解法

本篇文章解决的问题来源于算法设计与分析课程的课堂作业,主要是运用多种方法来计算斐波那契数.具体问题及解法如下: 一.问题1: 问题描述:利用迭代算法寻找不超过编程环境能够支持的最大整数的斐波那契数是第几个斐波那契数.(Java: 231-1 for int, 263-1 for long) 解决方案:针对问题1,此处要使用迭代法来解决,具体实现代码如下: //用迭代法寻找编程环境支持的最大整数(int型)的斐波那契数是第几个斐波那契数 public static int max_int_iter

斐波那契数与二分法的递归与非递归算法及其复杂度分析

1. 什么是斐波那契数? 这里我借用百度百科上的解释:斐波那契数,亦称之为斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列.费波那西数列.费波拿契数.费氏数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*),用文字来说,就是斐波那契数列列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加.特别指出:0不是第一

用安卓实现斐波那契数和最近点对问题

目录 1 运行效果展示 2 具体编码 2.1 斐波那契数问题 2.2 最近点对问题 1 运行效果展示 2 具体编码 2.1 斐波那契数问题 具体问题即解决方案请参考本人另一篇博客:算法笔记_001:斐波那契数的多种解法 功能界面布局main_one.xml文件对应界面图: 其源码: <?xml version="1.0" encoding="utf-8" ?> <GridLayout xmlns:android="http://schem

「递归」求第n个斐波纳契数

用「递归」方法求第n个斐波纳契数 1 #include<stdio.h> 2 long int dog(int p) 3 { 4 if(p>1) 5 return dog(p-1)+dog(p-2); 6 else if (p==1||p==0) 7 return 1; 8 } 9 int main() 10 { 11 printf("您要求第几个斐波纳契数:\n"); 12 int n; 13 scanf("%d",&n); 14 pri

poj 3070 Fibonacci 【矩阵快速幂 求第N个斐波那契数%1000】

Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11123   Accepted: 7913 Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn ? 1 + Fn ? 2 for n ≥ 2. For example, the first ten terms of the Fibonacci sequenc

HDU 5914 Triangle(打表——斐波那契数的应用)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5914 Problem Description Mr. Frog has n sticks, whose lengths are 1,2, 3?n respectively. Wallice is a bad man, so he does not want Mr. Frog to form a triangle with three of the sticks here. He decides t

NOJ1113 斐波那契数应用 模拟

题目描述 知道斐波那契数吗?下面是它的一个定义: F1 = 1 F2 = 2 Fn+1 = Fn+Fn-1 ,这里n>1 每个正整数x 可写为不同斐波那契数的总和,因而意味着存在数k 和数 b1, b2, -, bk,使得x=b1*F1+ -+ bi*Fi+ - +bk*Fk, 其中bk = 1,bi (1≤i < k)为0或1.简言之,我们可写为: b(x) = (bk, bk-1, -, b1). 为使表示唯一,我们要求对所有i > 1,bi * bi-1 = 0. 利用斐波那契数,

斐波那契数应用

比赛描述 知道斐波那契数吗?下面是它的一个定义: F1 = 1 F2 = 2 Fn+1 = Fn+Fn-1 ,这里n>1 每个正整数x 可写为不同斐波那契数的总和,因而意味着存在数k 和数 b1, b2, -, bk,使得x=b1*F1+ -+ bi*Fi+ - +bk*Fk, 其中bk = 1,bi (1≤i < k)为0或1.简言之,我们可写为: b(x) = (bk, bk-1, -, b1). 为使表示唯一,我们要求对所有i > 1,bi * bi-1 = 0. 利用斐波那契数,