这是另外一种斐波那切数列.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; }