hdu 1021 Fibonacci Again
添加时间:2013-5-9 点击量:
解决本题的关键:经由过程公式前提:F(0)= 7, F(1) = 11,F(n) = F(n-1) + F(n-2) (n>=2). 找到规律。
由同余式的基个性质:
(1)自反性:a = a( mod m)。
以及同余式的四则运算法例:
(1)若是 a =b( mod m)且 c = d( mod m),则 a +c = (b + d)( mod m)。
可知,F(n) = F(n) ( mod m) = ( F(n-1) +F(n-2) )( mod m)。
按照题目已知前提:
Print the wordyes if 3 divide evenly into F(n);Print the wordno if not.
这里m取值为3,则可将公式前提演变为:
综上所述,可获得以下对应关系:F(0)= 1, F(1) = 2, F(n) = ( F(n-1) + F(n-2) )( mod 3) (n>=2).
index 0 1 2 3 4 5 6 7 8 9 10 11 12 13
value 1 2 0 2 2 1 0 1 1 2 0 2 2 1
print no no yes no no no yes no no no yes no no no
如许我们就获得了如下规律:从第2个开端每隔4个轮回一次。
#include <stdio.h>
void main()
{
int n;
while(scanf(%d, &n) !=EOF)
{
if((n - 2) % 4) // 按照上述规律
printf(no\n);
else
printf(yes\n);
}
}
View Code
#include<stdio.h>
#include<string.h>
long long f[1000009];
int main()
{
int n;
int i=2;
memset(f,0,sizeof(f));
f[0]=1;
f[1]=2;
for(i=2;i<=1000005;i++)
{
f[i]=(f[i-1]+f[i-2])%3;
}
while(scanf(%d,&n)==1)
{
if(f[n]==0)
{
printf(yes\n);
}
else printf(no\n);
}
return 0;
}
解决本题的关键:经由过程公式前提:F(0)= 7, F(1) = 11,F(n) = F(n-1) + F(n-2) (n>=2). 找到规律。
由同余式的基个性质:
(1)自反性:a = a( mod m)。
以及同余式的四则运算法例:
(1)若是 a =b( mod m)且 c = d( mod m),则 a +c = (b + d)( mod m)。
可知,F(n) = F(n) ( mod m) = ( F(n-1) +F(n-2) )( mod m)。
按照题目已知前提:
Print the wordyes if 3 divide evenly into F(n);Print the wordno if not.
这里m取值为3,则可将公式前提演变为:
综上所述,可获得以下对应关系:F(0)= 1, F(1) = 2, F(n) = ( F(n-1) + F(n-2) )( mod 3) (n>=2).
index 0 1 2 3 4 5 6 7 8 9 10 11 12 13
value 1 2 0 2 2 1 0 1 1 2 0 2 2 1
print no no yes no no no yes no no no yes no no no
如许我们就获得了如下规律:从第2个开端每隔4个轮回一次。
#include <stdio.h>
void main()
{
int n;
while(scanf(%d, &n) !=EOF)
{
if((n - 2) % 4) // 按照上述规律
printf(no\n);
else
printf(yes\n);
}
}
View Code
#include<stdio.h>
#include<string.h>
long long f[1000009];
int main()
{
int n;
int i=2;
memset(f,0,sizeof(f));
f[0]=1;
f[1]=2;
for(i=2;i<=1000005;i++)
{
f[i]=(f[i-1]+f[i-2])%3;
}
while(scanf(%d,&n)==1)
{
if(f[n]==0)
{
printf(yes\n);
}
else printf(no\n);
}
return 0;
}