ACM_Fibonacci数(同余)
Posted 霜雪千年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACM_Fibonacci数(同余)相关的知识,希望对你有一定的参考价值。
Fibonacci数
Time Limit: 2000/1000ms (Java/Others)
Problem Description:
斐波那契数列定义如下:f(0)=0,f(1)=1,f(n+2)=f(n+1)+f(n); 求斐波那契数列的第n项对10009取余后的结果。
Input:
多组测试,每组测试输入一个整数n(0<=n<=10^17).
Output:
对于每个测试,输出答案,占一行。
Sample Input:
10
Sample Output:
55
解题思路:运用同余定理:(a+b)%mod=(a%mod+b%mod)%mod。一般像这种取余的题目,答案是有规律的,于是暴力打表,果然发现有循环节数,为3336。注意输入的n已经爆int,要long long,水过。
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int mod = 10009; 4 int main() 5 { 6 int a[3336]={0,1}; 7 for(int i=2;i<3336;++i) 8 a[i]=(a[i-1]%mod+a[i-2]%mod)%mod; 9 long long n; 10 while(cin>>n) 11 cout<<a[n%3336]<<endl; 12 return 0; 13 }
以上是关于ACM_Fibonacci数(同余)的主要内容,如果未能解决你的问题,请参考以下文章
数论基础题 费马引理+卡特兰数+Lucas定理+同余方程+扩欧