斐波那契数

【题目描述】

小明现在知道斐波那契数列中的第X个数模P后的值N,即Fabonacci(X) mod P = N,以及X可能的最大值M,如果再对于斐波那契数列中每一个数都模P,他想知道这个数可能出现在第几个。

【输入描述】

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

【输出描述】

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

【样例输入】

3 7 5

【样例输出】

4

【数据范围及提示】

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

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

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

对于100%的数据,保证0 < M ≤ 1000,0 ≤ N < P,P为素数且2 < P< 105。

源代码:

#include<cstdio>
int m,n,p,f[1001];
bool s(0);
int main() //挺恶心的题。
{
    scanf("%d%d%d",&n,&p,&m);
    f[2]=f[1]=1;
    for (int a=3;a<=m;a++)
    {
        f[a]=(f[a-1]+f[a-2])%p; //Fabonacci数列大约在200左右就会超过int范围。
        if (f[a]==n)
        {
            s=true;
            printf("%d",a);
            break;
        }
    }
    if (n==1) //别忘了f[1]和f[2]。
    {
        s=true;
        printf("1");
    }
    if (!s)
      printf("-1");
    return 0;
}
原文地址:https://www.cnblogs.com/Ackermann/p/5558492.html