题目
There are another kind of Fibonacci numbers: F(0) = 7, F(1) = 11, F(n) = F(n-1) + F(n-2) (n>=2).
Input
Input consists of a sequence of lines, each containing an integer n. (n < 1,000,000).
Output
Print the word “yes” if 3 divide evenly into F(n).
Print the word “no” if not.
Sample
Input
0
1
2
3
4
5
Output
no
no
yes
no
no
no
题目译文
还有另一类斐波那契数: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”。
思路
递归与递推均超时,由手算可知斐波那契数列%3的余数有规律,每8个1循环,故只需计算0~7的F(n)值,由F(n%8)可得余数,判断是否可被3整除。
代码
#include <bits/stdc++.h>
using namespace std;
int a[10];
int main(){
int n,i;
while(cin>>n){
a[0]=7;
a[1]=11;
for(i=2;i<=7;++i)
a[i]=a[i-1]+a[i-2];
if(a[n%8]%3==0)
cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
return 0;
}