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,
    0sizeof(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;
    }







    分享到: