抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

题干

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.

还有另一类斐波那契数:F(0) = 7, F(1) = 11, F(n) = F(n-1) + F(n-2) (n>=2)。


Input

输入由一系列行组成,每一行包含一个整数n。1000000)。

Output

如果3人平均分成F(n),打印单词“yes”。

如果不是,打印单词“no”。

测试案例

Input

1
2
3
4
5
6
0
1
2
3
4
5

Output

1
2
3
4
5
6
no
no
yes
no
no
no

题意与思路

给定一个斐波那契数列:

F(0)=7,F(1)=11,F(n)=F(n−1)+F(n−2),n≥2F(0) = 7, \\F(1) = 11, \\F(n) = F(n-1) + F(n-2), n\geq2

求对于给定的 n ,F(n)F(n) 是否能整除 3。

由于斐波那契数列的递推关系是加法,因此其对 3 的整除性 也具有加法的递推关系:

F(i)≡amod  3F(i+1)≡bmod  3⇒F(i+2)≡(a+b)mod  3\begin{aligned} & F(i)\equiv a & \mod3\\ & F(i+1)\equiv b & \mod3\\ \Rightarrow & F(i+2)\equiv(a+b) & \mod3 \end{aligned}

手推几项找规律:

F(0)=7≡1mod  3F(1)=11≡2mod  3F(2)=18≡1+2≡0mod  3F(3)=29≡2+0≡2mod  3F(4)=47≡0+2≡2mod  3F(5)=76≡2+2≡1mod  3F(6)=123≡2+1≡0mod  3F(7)=199≡1+0≡1mod  3F(8)=322≡0+1≡1mod  3F(9)=521≡1+1≡2mod  3\begin{aligned} & F(0) = 7 &\equiv1 & \mod 3 \\ & F(1) = 11 &\equiv2 & \mod 3 \\ & F(2) = 18 &\equiv1+2 \equiv0 & \mod 3 \\ & F(3) = 29 &\equiv2+0 \equiv2 & \mod 3 \\ & F(4) = 47 &\equiv0+2 \equiv2 & \mod 3 \\ & F(5) = 76 &\equiv2+2 \equiv1 & \mod 3 \\ & F(6) = 123 &\equiv2+1 \equiv0 & \mod 3 \\ & F(7) = 199 &\equiv1+0 \equiv1 & \mod 3 \\ & F(8) = 322 &\equiv0+1 \equiv1 & \mod 3 \\ & F(9) = 521 &\equiv1+1 \equiv2 & \mod 3 \\ \end{aligned}

可以看出,F(8)≡F(0)≡1,F(9)≡F(1)≡2F(8)\equiv F(0)\equiv 1, F(9)\equiv F(1)\equiv2,此后 F(10)≡F(2),F(11)≡F(3),...F(10)\equiv F(2),F(11)\equiv F(3),...

周期为 8,当且仅当 n≡2mod  8n\equiv2\mod8 或 n≡6mod  8n\equiv 6\mod8 时 F(n)≡0mod  3F(n)\equiv0\mod3。


题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cstdio>
using namespace std;

int n;

int main(){
while (scanf("%d", &n) != EOF){
if(n % 8 == 2 || n % 8 == 6)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}

return 0;
}

评论