另类的斐波拉契问题

另类的斐波拉契问题

    Time Limit: 1000 ms 

    Memory Limit: 65535 kB 

    Description

众所周知,斐波拉契序列有以下特性:

F[n] = F[n - 1]  + F[n - 2] ( n >= 2);

     现在,我们令F[0] = 5, F[1] = 13

     现在我们需判断F[n]是否能够被3整除。

    Input

每行输入一个数n( 0 < n < 1,000,000,000 )

Output

每个n对应输出一行,如果F[n]能被3整除,则输出"Yes",否则则输出"No"

Sample Input

0

1

2

6

Sample Output

No

No

Yes

Yes

Source


因为被问及的是能否被3整除,那么很容易想到应该会有循环节。

我们假设f[1] = a, f[2] =b,同时我们也知道f[n]%3 = (f[n-1]+f[n-2])%3 = f[n-1]%3 + f[n-2] %3。

那么来尝试看看前几项:

(1):a%3 (2):b%3 (3):0 

(4):b%3 ( 5):b%3   (6):(2*b)%3 

(7):(3*b)%3=0  (8):(2*b)%3   (9):(2*b)%3 

(10):(4*b)%3=b%3   (11:)(3*b)%3=0

所以从第三项开始,可以得知循环节为4,所以容易得到标程如下:

#include <cstdio>
 
 int main()
 {
 	int n;
 	FILE * fin, * fout;
 	fin = fopen("1.std.in", "r");
 	fout = fopen("1.std.out", "w");
 	while ( ~fscanf(fin, "%d", &n) )
 	{
 		fprintf(fout, "%s\n", ( n - 2 ) % 4 ? "No" : "Yes");
 	}
 	fclose(fin);
 	fclose(fout);
 	return 0;
 }




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值