Description
给出一序列f(n)满足f(n)=f(n-1)+f(n-2),f(0)=7,f(1)=11,现在给出一些询问,每次询问输入n问f(n)是否能被3整除
Input
多组输入,每组用例占一行为一整数n,以文件尾结束输入
Output
对于每组用例,如果f(n)%3=0则输出yes,否则输出no
Sample Input
0
1
2
3
4
5
Sample Output
no
no
yes
no
no
no
Solution
直接求出这个序列不现实,因为f(n)只由f(n-1)和f(n-2)确定,而f(n)%3只有0~2三种情况,所以f(n)取值情况数最多不会超过3*3=9种,所以f(n)%3这个序列值的循环节最少为9,写出前9项发现只有f(2)和f(6)满足条件,所以对于任意n,只有n%8=2或者6时f(n)%3=0(序列从第0项开始)
Code
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
if(n%8==2||n%8==6)
printf("yes\n");
else
printf("no\n");
}
return 0;
}