[矩阵加速]TR的数列

题目描述

TR非常喜欢数学,经常一个人拿出草稿纸研究奇奇怪怪的数学问题,最近,他突然对数列产生了兴趣,他找到一个数列,类似于斐波拉契,即:Tn=1*f1+2*f2+3*f3+……+n*fn    (fn为斐波拉契的第n项值)

现在TR想请你帮忙求Tn%m的值

输入

两个用空格隔开的整数n和m

1≤n,m≤2^31-1

输出

Tn mod m的值

样例输入

5 5

样例输出

1

解题思路

首先先明白什么是矩阵的乘法

两个矩阵的乘法需满足一个条件就是矩阵A的列数要等于矩阵B的行数才能相乘。

它们构造了一个C矩阵。

如:A(n行,m列),B(m行,p列),则C(n行,p列).

C(i,j) = A(i,1) * B(1,j) + A(i,2) * B(2,j) ...... +A(i,m) * B(m,j)

于是就有矩阵乘法的模板。

要做这道题是需要会做求斐波那契的第n项的矩阵加速

我们定义A:[f1,f2].

B\begin{bmatrix} 0&1 \\ 1&1 \end{bmatrix}

则 A * (B)^n-2即可得到fn。

这里我们还要用矩阵快速幂。

这就是矩阵加速的基本定义。

然而这一道题显然是进阶的。

在这里给出两种方法。

1.

T_{i} = T_{i-1} + i*f_{i}

那么我们就需要将后面那一块用递推表示出来,我们姑且用P定义

则很显然可以推出来这一个东西。

P_{i - 1} + P_{i - 2} = (i - 2) * f_{i - 2} + f_{i - 1}

P_{i} = P_{i - 1} + P_{i - 2} + f_{i - 2} + f_{n}

既然都可这样进行递推了,那么我们将它放到矩阵当中就可以进行运算

我们定义

A\begin{bmatrix} T_i &P_{i} &P_{i+1} &f_{i} &f_{i+1} \end{bmatrix}

B\begin{bmatrix} 1 & 0 & 0 & 0 &0 \\ 0& 0 &1 &0 &0 \\ 1 & 1 & 1 &0 &1 \\ 0& 0 & 2 & 0 &1 \\ 0 & 0 & 1 & 1 &1 \end{bmatrix}

那么仅仅需要A * B^(n - 1)即可

 scanf ("%d%d",&n,&mod);
    A.n = 1;
    A.m = 5;
    B.n = B.m = 5;
    A.c[1][1] = 1;
    A.c[1][2] = 1;
    A.c[1][3] = 2;
    A.c[1][4] = 1;
    A.c[1][5] = 1;
    B.c[1][1] = B.c[2][3] = B.c[3][1] = B.c[3][2] = B.c[3][3] = 1;
    B.c[4][5] = B.c[5][3] = B.c[5][4] = B.c[5][5] = 1;
    B.c[4][3] = 2;
    C = A * qkpow(B,n - 1);
    printf("%lld",C.c[1][1]);

2.

换一种构造方式

我们如果用斐波那契前i项和来推的话其实也可推出来。

至于怎么做,给一个基情链接,只不过有一个地方好像是错了。代码实现也跟我不怎么一样,希望了解思想而自己做出来结果,不然的话。真的会被弄晕的。

不得不说矩阵乘法的代码都很奇葩。

scanf ("%d%d",&n,&mod);
    A.n = 1;
    A.m = 4;
    B.n = B.m = 4;
    A.c[1][1] = 0;
    A.c[1][2] = 1;
    A.c[1][3] = 1;
    A.c[1][4] = 1;
    B.c[1][1] = B.c[2][1] = B.c[2][2] = B.c[3][4] = B.c[4][2] = B.c[4][3] = B.c[4][4] = 1;
    C = A * qkpow(B,n - 1);
    printf("%lld",(C.c[1][2] * n - C.c[1][1] + mod) % mod);

有些东西我直接进行处理的,可能没这么好懂。

基于SSM框架的网红酒店预定系统,是一个集前台用户操作和后台管理员管理于一体的综合性平台。该系统旨在通过信息化手段,提高酒店预订的效率和用户体验。 系统的主要功能模块包括: 1. **用户管理**:允许用户注册、登录,查看个人信息,以及修改个人资料和密码。 2. **客房管理**:管理员可以添加、删除或修改客房信息,包括房型、价格、设施等。 3. **预订管理**:用户可以浏览可用房型,进行预订操作,管理员则可以管理预订订单,包括确认预订、办理入住和退房等。 4. **退订管理**:用户和管理员都可以处理预订的取消,管理员可以审核退订请求。 5. **系统管理**:管理员可以进行系统设置,包括权限管理、日志查看等。 系统的设计考虑了用户体验和管理员的便捷性,通过SSM框架的灵活性和MySQL数据库的稳定性,实现了数据的高效管理和处理。系统的前端界面友好,操作流程简洁,能够满足用户快速预订和查询的需求。同时,系统的后台管理功能强大,能够为管理员提供全面的数据分析和决策支持。 此外,系统还具有高度的安全性和稳定性,通过角色权限控制,确保了数据的安全性和系统的稳定运行。系统的开发和设计,不仅提升了网红酒店的品牌形象,也为用户带来了便捷的预订体验,进一步推动了酒店行业的信息化发展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值