这是另外一种斐波那切数列.F(0) = 7, F(1) = 11, F(n) = F(n-1) + F(n-2) (n>=2)
每行输入一个数n。(n <= 10^9 )
每行输出一个yes如果F(n)能被3整除,否则输出no
Sample Input
0
1
2
3
4
5
Sample Output
no
no
yes
no
no
no
这个题目主要让我们找规律的。
用到的公式是
(a+b)%3=(a%3 +b%3)%3;
第0项 7%3 =1;
第1项 11%3=2;
第2项 (1+2)%3=0;
第3项 (0+2)%3=2;
第4项 (2+0)%3=2;
第5项 (2+2)%3=1;
第6项 (1+2)%3=0;
第7项 (0+1)%3=1;第8项 (0+1)%3=1;
第9项 (1+1)%3=2;
显然从第八项开始重复 ,所以只要满足项数n%8==2||n%8==6这个时候可以满足条件
程序如下:
#include<stdio.h>
int main()
{
long n;
while(scanf("%ld",&n) != EOF)
if (n%8==2 || n%8==6)
printf("yes\n");
else
printf("no\n");
return 0;
}
另外一种复杂的方法是就是我们不断做求出每项的值最后取余即可;
#include<stdio.h>
int mod3( int x )
{
int a,b,c,i;
if( x == 0 )
return 7 % 3;
else if( x == 1 )
return 11 % 3;
else
{
a = 7; b = 11;
while( --x > 0 )
{
c = ( a + b ) % 3;
a = b;
b = c;
}
return c % 3;
}
}
int main( void )
{
int input;
while( scanf( "%d", &input ) != EOF )
if( mod3( input ) == 0 )
printf( "yes\n" );
else
printf( "no\n" );
return 0;
}