HDU1021 Fibonacci Again 循环节||取模

来源:互联网 发布:淘宝微星游戏本旗舰店 编辑:程序博客网 时间:2024/06/05 20:37

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1021



题目大意:已知f[0]=7,f[1]=11,f[i]=f[i-1]+f[i-2](i>1),让你判断f[n]是否能被3整除。


分析:考虑对3取模,可以找出循环节,n的范围为10^6,也可以打表。


循环节实现代码如下:

#include <iostream>#include <cstdio>using namespace std;int main(){    int f[100],i,n;    f[0]=7,f[1]=11;    for(i=2;i<100;i++)    {        f[i]=(f[i-1]%3+f[i-2]%3)%3;        if(f[i]==f[1]&&f[i-1]==f[0])          break;    }    while(scanf("%d",&n)!=-1)    {        if(f[n%i]) puts("no");        else puts("yes");    }    return 0;}






打表实现代码如下:

#include <cstdio>using namespace std;const int MAX=1000001;int f[MAX];void init(){    int i;    f[0]=7;f[1]=11;    for(i=2;i<MAX;i++)      f[i]=(f[i-1]%3+f[i-2]%3)%3;}int main(){    init();    int n;    while(scanf("%d",&n)!=-1)    {        if(f[n]==0)  puts("yes");        else puts("no");    }    return 0;}


0 0