【题目描述】
小明现在知道斐波那契数列中的第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; }