题干
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
Output
题意与思路
给定一个斐波那契数列:
F(0)=7,F(1)=11,F(n)=F(n−1)+F(n−2),n≥2
求对于给定的 n
,F(n) 是否能整除 3
。
由于斐波那契数列的递推关系是加法,因此其对 3
的整除性 也具有加法的递推关系:
⇒F(i)≡aF(i+1)≡bF(i+2)≡(a+b)mod3mod3mod3
手推几项找规律:
F(0)=7F(1)=11F(2)=18F(3)=29F(4)=47F(5)=76F(6)=123F(7)=199F(8)=322F(9)=521≡1≡2≡1+2≡0≡2+0≡2≡0+2≡2≡2+2≡1≡2+1≡0≡1+0≡1≡0+1≡1≡1+1≡2mod3mod3mod3mod3mod3mod3mod3mod3mod3mod3
可以看出,F(8)≡F(0)≡1,F(9)≡F(1)≡2,此后 F(10)≡F(2),F(11)≡F(3),...
周期为 8
,当且仅当 n≡2mod8 或 n≡6mod8 时 F(n)≡0mod3。
题解
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; }
|