`

HDU 2855 Fibonacci Check-up

阅读更多
/*
*  [题意]
*   F(0) = 0; F(1) = 1; F(n) = F(n-1)+F(n-2); (斐波那契数列)
*   设C[i][j]为组合数i种元素中取j种元素的方法
*   给出n、m,求( C[n][0]*F(0)+C[n][1]*F(1)+...+C[n][k]*F(k) ) % m;
*  [解题方法]
*   设矩阵 A  =  |1 1|
*               |1 0|
*   设矩阵 B = (A^n)
*   则B[0][0] = F(n-1); B[0][1] = B[1][0] = F(n); B[1][1] = F(n-1);
*       { 注:上述为斐波那契矩阵的性质 }
*   令D = ( C[n][0]*(A^0) + C[n][1]*(A^1) +...+ C[n][k]*(A^k) ) % m
*       = ( (A + E)^n ) % m   (E为单位阵)
*       { 类比二次多项式(x+1)^n = C[n][0]+C[n][0]*x+...+C[n][k]*(x^k) }
*   则D[1][0]或D[0][1]即为所求
*/
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define M 2
#define LL long long
#define FF(i, n) for(int i = 0; i < n; i++)

int ret[M][M], mod;
int init[M][M];
int ss[M][M] = {2, 1, 1, 1};

void ini(int n)
{
    FF(i, n) FF(j, n) init[i][j] = ss[i][j];
}

void matmul(int a[][M], int b[][M], int n)
{
    int tp[M][M] = {0};
    FF(i, n) FF(k, n) if(a[i][k]) FF(j, n) if(b[k][j])
        tp[i][j] = (tp[i][j] + (LL)a[i][k]*b[k][j]) % mod;
    FF(i, n) FF(j, n) a[i][j] = tp[i][j];
}

void qmod(int n, int b)
{
    FF(i, n) FF(j, n) ret[i][j] = (i==j);
    for( ; b; b >>= 1)
    {
        if (b & 1) matmul(ret, init, n);
        matmul(init, init, n);
    }
}

int main()
{
    int t, n;
    scanf("%d", &t);
    while (t--)
    {
        scanf("%d%d", &n, &mod);
        ini(M);
        qmod(M, n);
        printf("%d\n", ret[0][1]);
    }
    return 0;
}

 

1
0
分享到:
评论

相关推荐

    hdu acm教案5-7

    【标题】"hdu acm教案5-7"所涉及的知识点主要集中在ACM(International Collegiate Programming Contest,国际大学生程序设计竞赛)的教学内容中,这部分教程覆盖了第5到第7节的关键概念和技巧。ACM竞赛是全球范围内...

    hdu acm教案8-11

    HDU ACM教案8-11是一系列针对ACM(国际大学生程序设计竞赛)的培训教程,这个资源集合了第8到11章的教学内容,旨在帮助参赛者提升算法设计和编程能力。ACM竞赛是全球知名的编程比赛,对参赛者的逻辑思维、问题解决和...

    HDU-EID-V2-核心板1

    在本话题中,我们关注的是一个名为"HDU-EID-V2-核心板1"的特定设计,它涉及到STM32的核心组件、接口、电源管理和调试配置。 首先,核心板设计中提到了F103和F207两个型号的STM32芯片。F103和F207属于STM32的不同...

    hdu-OS-simple-shell,Linux_的_Shell_命令窗口_demo_版实现_shell-demo.zip

    hdu-OS-simple-shell,Linux_的_Shell_命令窗口_demo_版实现_shell-demo

    HDU-EID-V2-扩展板1

    HDU-EID-V2-扩展板1是一款专为STM32微控制器设计的硬件扩展板,主要用于增强核心板的功能。该扩展板具有多种接口和功能,包括ADC(模数转换器)、电位器、DAC(数模转换器)输出以及TEST_V跳线,能够满足用户在模拟...

    HDU+2000-2099+解题报告

    HDU(杭州电子科技大学)在线评测系统是许多编程竞赛爱好者和学习者经常访问的平台,它提供了大量的算法题目供用户练习和挑战。这个压缩包文件“HDU 2000-2099 解题报告”显然包含了在这个题号范围内的一些问题、...

    hdu-page-11-answer.rar_hdu_hdu oj第十一页_page_搜题_杭电oj

    本资料"HDU Page 11 Answer"正是针对杭电OJ中第11页的题目,提供了一系列题解,旨在帮助初学者快速掌握基础算法,并提升编程能力。 一、ACM入门基础知识 ACM竞赛强调的是团队协作和快速解决问题的能力,其核心是...

    HDU-2000-2099.zip_hdu2000

    【标题】"HDU-2000-2099.zip_hdu2000" 是一个包含杭电(Hangzhou Dianzi University)ACM竞赛题目解题报告的压缩包,覆盖了编号从2000到2099的题目。这个资源对于学习算法、提高编程技巧以及准备ACM/ICPC(国际大学...

    HDU-2000-2099.rar_hdu

    HDU(杭州电子科技大学在线评测系统)是一个知名的编程竞赛平台,为编程爱好者提供了大量的算法题目进行练习和比赛。这个名为"HDU-2000-2099.rar_hdu"的压缩包包含了该平台从2000到2099共100道题目的源代码。这些...

    HDU+2000-2099+解题报告.zip

    《杭电OnlineJudge 2000-2099解题报告》是针对杭州电子科技大学(HDU)在线评测系统(OnlineJudge)中2000至2099题目的详细解答集锦,主要涵盖了算法分析、编程技巧以及问题解决策略等内容。这份解题报告以CHM...

    hdu1250高精度加法

    ### hdu1250高精度加法 #### 背景介绍 在计算机科学与编程竞赛中,处理大整数运算(特别是加法、减法、乘法等)是常见的需求之一。当数字的位数超过了标准数据类型(如`int`、`long`等)所能表示的最大值时,就需要...

    ACM HDU 2000-2099 解题报告 杭电 ACM

    《ACM HDU 2000-2099 解题报告 杭电 ACM》是一份详尽的编程竞赛解题集,主要涵盖了杭电(Hangzhou Dianzi University)在线判题系统(HDU OJ)上的2000至2099号题目。这份解题报告是针对参与ACM/ICPC(国际大学生...

    HDU-1535-.zip_多源点

    标题中的"HDU-1535-.zip_多源点"表明这是一个关于解决 ACM (国际大学生程序设计竞赛)问题的程序代码包,问题编号为 HDU 1535,且该问题涉及到多源点的最短路径计算。描述中提到的"求多源点到单终点的最短路(反向...

    2019-hdu-multi-(2019杭电多校第二场数据与标程).zip

    《2019-hdu-multi-(2019杭电多校第二场数据与标程).zip》是一个专门针对编程竞赛爱好者和ACM(国际大学生程序设计竞赛)参赛者的资源包。这个压缩文件的核心内容是2019年杭州电子科技大学(HDU)主办的多校联合...

    hdu oj poj 题目代码与详解

    【题目代码与详解】是针对在线编程竞赛平台HDU(杭州电子科技大学在线评测系统)和POJ(普林斯顿大学在线判题系统)中的经典题目所编写的解决方案和解析的集合。这些平台是程序员和计算机科学学生提升算法技能、熟悉...

    hdu 入门代码(2000-2099)

    HDU入门代码(2000-2099)是一个专门为ACM(国际大学生程序设计竞赛,简称ICPC)初学者准备的资源集合。这个压缩包包含了从2000到2099编号的HDU(杭州电子科技大学在线评测系统)题目,每个题目都配有详细的解题报告...

    HDU实验板硬件手册-STM32F1031

    HDU-EID-V2开发板是一款基于STM32F103VCT6微控制器的实验平台,专门设计用于教学和电子爱好者进行嵌入式系统的学习与开发。STM32F103VCT6处理器内核是基于ARM Cortex-M3架构的,具有120MHz的工作频率,内置256KB的...

Global site tag (gtag.js) - Google Analytics