Fibonacci Again
Problem Description
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
Sample Output
no
no
yes
no
no
no
开始使用将结果算出来然后在判断是否被整除的方法,AC失败,然后使用更多的数值来调试,发下在50多的时候就发生了错误,数值溢出了,如果数足够大的时候会发生超时,下面是失败的代码:
#include<stdio.h>
int main()
{
int n, i, f1, f2, f, flag;
while( ~scanf("%d"),&n)
// for(n = 0;n <= 100;n++)
{
f1 = 7;
f2 = 11;
if(n == 0)
f = f1;
else if( n == 1)
f = f2;
else
{
for ( i = 1; i < n; i++)
{
f = f1 + f2;
f1 = f2;
f2 = f;
}
}
flag = f % 3;
if(flag)
printf("%d-----no\n",i);
else
printf("%d-----yes\n",i);
}
return 0;
}
使用了一些数据之后发现石油规律的,每四个为一组,每组中的第三个数会被3整除。即AC的代码如下所示:
#include<stdio.h>
int main()
{
int n, flag;
while(scanf("%d",&n)!=EOF)
{
flag = (n + 1) % 4;
if(flag == 3)
printf("yes\n");
else
printf("no\n");
}
return 0;
}