描述: 还有另一种斐波纳契数:F(0)= 7,F(1)= 11,F(n)= F(n-1)+ F(n-2)(n> = 2)。 输入 输入由一系列行组成,每行包含一个整数n。 (n <1,000,000)。 输出 如果F(n)可以被3整除,则输出单词“yes”。 如果不可以,输出单词“no”。
这个题目找规律就好了,因为n的范围比较大,如果递推肯定是超时的。
注意:a%c+b%c=(a+b)%c
最多有3*3=9种可能性,可以试着打表mod3的结果:
F(0)余1 F(1)余2 F(2)余0 F(3)余2 F(4)余2 F(5)余1
F(6)余0 F(7)余1 F(8)余1 F(9)余2
F(8)和F(9)开始对应F(0)和F(1),因此循环节找到了,周期为8。
F(8k+*) | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 |
余 | 2 | 0 | 2 | 2 | 1 | 0 | 1 | 1 |
判断 | no | yes | no | no | no | yes | no | no |
1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 6 int main() 7 { 8 int n,m[8]={1,2,0,2,2,1,0,1}; 9 while(~scanf("%d",&n)) 10 { 11 n=m[n%8]; 12 if(n==0) printf("yes "); 13 else printf("no "); 14 } 15 return 0; 16 }