题目链接: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;
}