能被3整除的Fibonacci的下标号

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

                
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值