zoukankan      html  css  js  c++  java
  • 1250 Fibonacci数列

    1250 Fibonacci数列

     

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 钻石 Diamond
     
     
    题目描述 Description

    定义:f0=f1=1, fn=fn-1+fn-2(n>=2)。{fi}称为Fibonacci数列。

    输入n,求fn mod q。其中1<=q<=30000。

    输入描述 Input Description

    第一行一个数T(1<=T<=10000)。

    以下T行,每行两个数,n,q(n<=109, 1<=q<=30000)

    输出描述 Output Description

    文件包含T行,每行对应一个答案。

    样例输入 Sample Input

    3

    6 2

    7 3

    7 11

    样例输出 Sample Output

    1

    0

    10

    数据范围及提示 Data Size & Hint

    1<=T<=10000

    n<=109, 1<=q<=30000

    分类标签 Tags 点此展开 

     
    AC代码:
    #include<cstdio>
    #include<cstring>
    #define ll long long
    using namespace std;
    struct node{
        int a[2][2];
    }ans,ss;
    int T,n,mod;
    inline node mul(node &a,node &b){
        node c;
        for(int i=0;i<2;i++){
            for(int j=0;j<2;j++){
                c.a[i][j]=0;
                for(int k=0;k<2;k++){
                    c.a[i][j]=(c.a[i][j]+a.a[i][k]*b.a[k][j])%mod;
                }
            }
        }
        return c;
    }
    void fpow(int p){
        for(;p;p>>=1,ss=mul(ss,ss)) if(p&1) ans=mul(ans,ss);
    }
    int main(){
        scanf("%d",&T);
        while(T--){
            scanf("%d%d",&n,&mod);
            if(n==1){printf("%d
    ",1%mod);continue;}
            if(n==2){printf("%d
    ",1%mod);continue;}
            if(n==3){printf("%d
    ",2%mod);continue;}
            ans.a[0][0]=ans.a[1][0]=1;ans.a[0][1]=ans.a[1][1]=0;    
            ss.a[0][0]=ss.a[1][0]=ss.a[0][1]=1;ss.a[1][1]=0;
            fpow(n);
            printf("%d
    ",ans.a[0][0]);
        }
        return 0;
    }
  • 相关阅读:
    VUE 引入element ui 样式不生效解决
    Spark项目故障思路整理总结
    Spark-环境安装
    01.Kettle的安装-千亿级数仓环境搭建
    千亿级数仓day01-项目的简介
    Umeng项目day04
    Umengday12-统计指标
    Umengday11-azkaban调度
    Umengday09-hive自定义UDTF函数叉分函数
    Docker配置jdk1.8
  • 原文地址:https://www.cnblogs.com/shenben/p/5879173.html
Copyright © 2011-2022 走看看