给出一个d阶线性递推关系,求f(n) mod m的值。

,

求出An-dv0,该向量的最后一个元素就是所求。

 #include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; const int maxn = ; typedef long long Matrix[maxn][maxn];
typedef long long Vector[maxn]; int d, n, m; void matrix_mul(Matrix A, Matrix B, Matrix res)
{
Matrix C;
memset(C, , sizeof(C));
for(int i = ; i < d; i++)
for(int j = ; j < d; j++)
for(int k = ; k < d; k++)
C[i][j] = (C[i][j] + A[i][k]*B[k][j]) % m;
memcpy(res, C, sizeof(C));
} void matrix_pow(Matrix A, int n, Matrix res)
{
Matrix a, r;
memcpy(a, A, sizeof(a));
memset(r, , sizeof(r));
for(int i = ; i < d; i++) r[i][i] = ;
while(n)
{
if(n&) matrix_mul(r, a, r);
n >>= ;
matrix_mul(a, a, a);
}
memcpy(res, r, sizeof(r));
} int main()
{
//freopen("in.txt", "r", stdin); while(cin >> d >> n >> m && d)
{
Matrix A;
memset(A, , sizeof(A));
Vector a, f;
for(int i = ; i < d; i++) { cin >> a[i]; a[i] %= m; }
for(int i = ; i < d; i++) { cin >> f[i]; f[i] %= m; }
if(n <= d) { cout << f[n-] << "\n"; continue; }
for(int i = ; i < d-; i++) A[i][i+] = ;
for(int i = ; i < d; i++) A[d-][i] = a[d-i-];
matrix_pow(A, n-d, A);
long long ans = ;
for(int i = ; i < d; i++) ans = (ans + A[d-][i]*f[i]) % m;
cout << ans << "\n";
} return ;
}

代码君

UVa 10870 (矩阵快速幂) Recurrences的更多相关文章

  1. UVa 10870 & 矩阵快速幂

    题意: 求一个递推式(不好怎么概括..)的函数的值. 即 f(n)=a1f(n-1)+a2f(n-2)+...+adf(n-d); SOL: 根据矩阵乘法的定义我们可以很容易地构造出矩阵,每次乘法即可 ...

  2. UVA - 11149 (矩阵快速幂+倍增法)

    第一道矩阵快速幂的题:模板题: #include<stack> #include<queue> #include<cmath> #include<cstdio ...

  3. UVa 10870 Recurrences (矩阵快速幂)

    题意:给定 d , n , m (1<=d<=15,1<=n<=2^31-1,1<=m<=46340).a1 , a2 ..... ad.f(1), f(2) .. ...

  4. UVA - 10870 Recurrences 【矩阵快速幂】

    题目链接 https://odzkskevi.qnssl.com/d474b5dd1cebae1d617e6c48f5aca598?v=1524578553 题意 给出一个表达式 算法 f(n) 思路 ...

  5. POJ-3070Fibonacci(矩阵快速幂求Fibonacci数列) uva 10689 Yet another Number Sequence【矩阵快速幂】

    典型的两道矩阵快速幂求斐波那契数列 POJ 那是 默认a=0,b=1 UVA 一般情况是 斐波那契f(n)=(n-1)次幂情况下的(ans.m[0][0] * b + ans.m[0][1] * a) ...

  6. uva 10518 - How Many Calls?(矩阵快速幂)

    题目链接:uva 10518 - How Many Calls? 公式f(n) = 2 * F(n) - 1, F(n)用矩阵快速幂求. #include <stdio.h> #inclu ...

  7. Tribonacci UVA - 12470 (简单的斐波拉契数列)(矩阵快速幂)

    题意:a1=0;a2=1;a3=2; a(n)=a(n-1)+a(n-2)+a(n-3);  求a(n) 思路:矩阵快速幂 #include<cstdio> #include<cst ...

  8. UVA10870—Recurrences(简单矩阵快速幂)

    题目链接:https://vjudge.net/problem/UVA-10870 题目意思: 给出a1,a2,a3,a4,a5………………ad,然后算下面这个递推式子,简单的矩阵快速幂,裸题,但是第 ...

  9. UVA10870 Recurrences —— 矩阵快速幂

    题目链接:https://vjudge.net/problem/UVA-10870 题意: 典型的矩阵快速幂的运用.比一般的斐波那契数推导式多了几项而已. 代码如下: #include <bit ...

随机推荐

  1. STM32的SPI问题。

    问题描述: 之前一直使用的单片机是LPC2109,对其SPI很熟悉.基本就是原本拿来稍作修改就用.由于某种原因需要使用STM32,然后设备的驱动是之前写好的,只修改了一些硬件控制端口,由于硬件驱动使用 ...

  2. 《Dive into Python》Chapter 2 and Chapter 3 笔记

    Example 2.1. odbchelper.py def buildConnectionString(params): """Build a connection s ...

  3. 1458: 士兵占领 - BZOJ

    Description 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里不能放置士兵.我们称这些士兵占领了整个棋盘当满足第i行至少放 ...

  4. Eclipse 安装热部署JRebel

    开发环境 sts-3.7.2.RELEASE 安装步骤 1.打开应市场 2.搜索JRebel并进行下载 3.下载完成后点击JReble Configuation进入

  5. [转载]Spring Bean Definition Inheritance

    Following is the configuration file Beans.xml where we defined "helloWorld" bean which has ...

  6. POJ 1258 Agri-Net(最小生成树,基础)

    题目 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<math ...

  7. 1034-IBM技术俱乐部主席竞选

    描述 今天IBM技术俱乐部举行主席竞选,你的任务是统计谁是得票最多的候选人. 输入 输入数据包含多组测试案例. 每组测试案例由N(0<N<1000)开头,N表示投票总数,后续N行每行包含一 ...

  8. javascript背景淡入淡出

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  9. Java并发包中常用类小结(一)

    从JDK1.5以后,Java为我们引入了一个并发包,用于解决实际开发中经常用到的并发问题,那我们今天就来简单看一下相关的一些常见类的使用情况. 1.ConcurrentHashMap Concurre ...

  10. python对json的相关操作

    什么是json: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programm ...