有另一种斐波那契数列:F_0 = 7F 0 =7,F_1 =11F 1 =11,F_n=F_{n - 1}+F_{n - 2}F n =F n−1 +F n−2(n≥2)。
输入格式
输入数据有多行组成,每一行上是一个整数 n(n \leq 10^6)n(n≤10 6 )。
输出格式
如果 F n
能被 33 整除,那么打印一行"yes",否则,打印一行"no"。
提示
先使用数组把 10 6 的F i
计算出来,然后每次查询,要不然会超时的。
输出时每行末尾的多余空格,不影响答案正确性
样例输入
0
1
2
3
4
5
样例输出
no
no
yes
no
no
no
用数组把每一项保存,因为第10的6次方个数很大,这里使用%3操作保存每一项
法一
#include<stdio.h>
int a[1000005];//数组定义放在main函数上面
int main(){
a[0]=7,a[1]=11;
for(int i=2;i<=1e6;i++){
a[i]=(a[i-1]+a[i-2])%3;//方便保存
}
int n;
while(scanf("%d",&n)!=EOF){//循环到文本结束
if(a[n]%3==0){
printf("yes\n");
}
else{
printf("no\n");
}
}
return 0;
}
法二
打印出上面数组前面20项,查找规律
数组下标从0开始
#include<stdio.h>
int main(){
int n;
while(scanf("%d",&n)!=EOF){
if(n==2||n%4==2){
printf("yes\n");
}else{
printf("no\n");
}
}
return 0;
}