zoukankan      html  css  js  c++  java
  • fibonacci数列的和取余(1)

    As we know , the Fibonacci numbers are defined as follows:

     """"

    Given two numbers a and b , calculate . """"

    Input

    The input contains several test cases. Each test case consists of two non-negative integer numbers a and b (0 ≤ a ≤ b ≤1,000,000,000). Input is terminated by a = b = 0.

    Output

    For each test case, output S mod 1,000,000,000, since S may be quite large.

    Sample Input

    1 1
    3 5
    10 1000
    0 0
    

    Sample Output

    1
    16
    496035733

    #include <iostream>
    #include <cstdio>
    #include <cmath>
    using namespace std;
    const long long mod=1e9;
    
    typedef struct
    {
      long long m[3][3];
    }mat;
    
    mat p={1,1,0,1,0,0,1,0,1},I={1,0,0,0,1,0,0,0,1};
    
    mat calc(mat a,mat b)
    {
        int i,j,k;
        mat c;
        for(i=0;i<3;i++)
        for(j=0;j<3;j++)
        {
            c.m[i][j]=0;
           for(k=0;k<3;k++)
          {
            c.m[i][j]+=a.m[i][k]*b.m[k][j]%mod;
          }
          c.m[i][j]%=mod;
        }
        return c;
    }
    
    mat matirx(long long n)
    {
        mat m=p,b=I;
        while(n>=1)
        {
            if(n&1) b=calc(b,m);
            n>>=1;
            m=calc(m,m);
        }
        return b;
    }
    
    int main()
    {
        long long a,b;
        mat x,y;
        while(scanf("%lld%lld",&a,&b)==2&&(a+b))
        {
            long long sum=0;
               y=matirx(b);
               sum=sum+(y.m[2][0]+y.m[2][1]+y.m[2][2])%mod;
               if(a>0)
               {
                   x=matirx(a-1);
                   sum=sum-(x.m[2][0]+x.m[2][1]+x.m[2][2])%mod;
               }
               else
               sum-=1;
               sum=(sum+mod)%mod;
            printf("%lld
    ",sum);
        }
        return 0;
    }
  • 相关阅读:
    [BZOJ1385][Baltic2000]Division expression
    [BZOJ1412/Luogu2598][ZJOI2009]狼和羊的故事
    iPhone SlideShow
    替换一个文件中的内容BAT
    用指定字符串替换指定内容
    修改注册表
    如何在单独的窗口中打开 Excel 文件
    IBatis和Hibernate区别
    c# 常用的面试题
    在线编译器
  • 原文地址:https://www.cnblogs.com/chen9510/p/4734688.html
Copyright © 2011-2022 走看看