Description
斐波那契数列是如下的一个数列,0,1,1,2,3,5……,其通项公式为F(n)=F(n-1)+F(n-2),(n>=2) ,其中F(0)=0,F(1)=1,你的任务很简单,判定斐波契数列的第K项是否为偶数,如果是输出YES,否则输出NO
Input
第一行,T,表示有T个测试样例。
接下来T行,每行一个数据K(0<=K<=10^10000),表示要判定的是哪一项。
Output
如果第K项是偶数,输出YES,否则输出NO。
Sample Input
2
0
1
Sample Output
YES
NO
Hint
64-bit interger is not enough for 10^10000
解题思路:
这里我用了Fibonaci数的一个性质:gcd(Fm,Fn)=F(gcd(m,m)),所以判断第K的Fibonacci数是不是奇数,可要与F(3)=2求最小公约数是不是2就可以,
gcd(Fk,F3)=F(gcd(k,3)),于是就转变为k mod 3?=0的问题。通过在网上查找,发现:
如果一个多位数的每个位相加起来的和能被3整除,那么这个多位数就能被3整除。如123,1+2+3=6mod3=0,所以123 mod3 =0
这个对mod9也是成立的。
#include<iostream>
#include<string>
using namespace std;
int main()
{
int T;
cin>>T;
for(int test=0;test<T;++test)
{
string K;
cin>>K;
int temp = 0;
int len = K.length();
for(int i=0;i<len;++i)
{
temp += K[i]-'0';
}
if(temp%3==0)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
最后欢迎大家访问我的个人网站: 1024s