Problem 1049 - 斐波那契数
/*
Problem 1049 - 斐波那契数 Time Limit: 1000MS Memory Limit: 65536KB Difficulty:
Total Submit: 1383 Accepted: 289 Special Judge: No Description
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
*/
这个一看数据10的10000次方,放心吧,肯定大数!然后先别急着递推的(大数斐波那契稍微麻烦点),根据小学学的知识我们可以肯定:每三个数出现一个偶数。这个很好证明。而且第一个数还是第0项。这就更好说了,第0,3,6,9……项为偶数。准备写大数除法。但是先别急,再想想,小学还学了个如果一个数的各位数字之和能被3整除,则这个数能被3整除。10的10000次方,10000位,都是10以内的数加起来不超过100000,int就能存下了。
ps:①如果一个数的末两位数能被4或25整除,那么这个数就一定能被4或25整除。
②百位、个位和十位所组成的三位数能被8整除,则这个数能被8整除。
③各个数位上的数字和能被9整除,则这个数能被9整除。
#include<stdio.h>
#include<string.h>
char s[10010];
int main()
{
int n,i,sum,len;
while(scanf("%d",&n)!=EOF)
{
while(n--)
{
sum=0;
scanf("%s",s);
len=strlen(s);
for(i=0;i<len;i++)
sum+=s[i]-'0';
if(sum%3==0) printf("YES\n");
else printf("NO\n");
}
}
return 0;
}