P5175 数列

anb=(x×an−1+y×an−2)2x2×an−12+y2×an−22+2×x×y×an−1an−2x2×an−12+y2×an−22+2×x×y×an−2(x×an−2+y×an−3)x2×an−12+y2×an−22+2×x×y×(x×an−22+y×an−2×an−3)a_n ^ b = \left(x \times a_{n - 1} + y \times a_{n - 2}\right) ^ 2\\ x ^ 2 \times a_{n - 1} ^ 2 + y ^ 2 \times a_{n - 2} ^ 2 + 2 \times x \times y \times a_{n - 1} a_{n - 2}\\ x ^ 2 \times a_{n - 1} ^ 2 + y ^ 2 \times a_{n - 2} ^ 2 + 2 \times x \times y \times a_{n - 2} \left(x \times a_{n - 2} + y \times a_{n - 3} \right)\\ x ^ 2 \times a_{n - 1} ^ 2 + y ^ 2 \times a_{n - 2} ^ 2 + 2 \times x \times y \times \left(x \times a_{n - 2} ^ 2 + y \times a_{n - 2} \times a_{n - 3} \right)\\ anb​=(x×an−1​+y×an−2​)2x2×an−12​+y2×an−22​+2×x×y×an−1​an−2​x2×an−12​+y2×an−22​+2×x×y×an−2​(x×an−2​+y×an−3​)x2×an−12​+y2×an−22​+2×x×y×(x×an−22​+y×an−2​×an−3​)
Sn+1=Sn+an+12S_{n + 1} = S_{n} + a_{n + 1} ^ 2Sn+1​=Sn​+an+12​,

an+12=x2×an+y2×an−1+2×x×y×an×an−1a_{n + 1} ^ 2 = x ^ 2 \times a_n + y ^ 2 \times a_{n - 1} + 2 \times x \times y \times a_n \times a_{n - 1}an+12​=x2×an​+y2×an−1​+2×x×y×an​×an−1​,

an+1an=x×an2+y×an×an−1a_{n + 1} a_n = x \times a_n ^ 2 + y \times a_{n} \times a_{n - 1}an+1​an​=x×an2​+y×an​×an−1​,

[Snan2an−12anan−1]\begin{bmatrix}S_n & a_n ^ 2 & a_{n - 1} ^ 2 & a_n a_{n - 1}\end{bmatrix}[Sn​​an2​​an−12​​an​an−1​​] ×\times× [1000x2x21xy2y2002×x×y2×x×y0y]\begin{bmatrix} 1 & 0 & 0 & 0\\ x ^ 2 & x ^ 2 & 1 & x\\ y ^ 2 & y ^ 2 & 0 & 0\\ 2 \times x \times y & 2 \times x \times y & 0 & y\end{bmatrix}⎣⎢⎢⎡​1x2y22×x×y​0x2y22×x×y​0100​0x0y​⎦⎥⎥⎤​

#include <bits/stdc++.h>using namespace std;const int mod = 1e9 + 7;inline int add(int x, int y) {return x + y < mod ? x + y : x + y - mod;
}struct Matrix {int a[4][4];
};Matrix operator * (Matrix a, Matrix b) {Matrix ans;for (int i = 0; i < 4; i++) {for (int j = 0; j < 4; j++) {ans.a[i][j] = 0;for (int k = 0; k < 4; k++) {ans.a[i][j] = add(ans.a[i][j], 1ll * a.a[i][k] * b.a[k][j] % mod);}}}return ans;
}int main() {//  freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);int T;scanf("%d", &T);while (T--) {long long n;int a1, a2, x, y;scanf("%lld %d %d %d %d", &n, &a1, &a2, &x, &y);if (n == 1) {printf("%d\n", 1ll * a1 * a1 % mod);}else if (n == 2) {printf("%d\n", add(1ll * a1 * a1 % mod, 1ll * a2 * a2 % mod));}else {Matrix ans = {add(1ll * a1 * a1 % mod, 1ll * a2 * a2 % mod), int(1ll * a2 * a2 % mod), int(1ll * a1 * a1 % mod), int(1ll * a1 * a2 % mod),0, 0, 0, 0,0, 0, 0, 0,0, 0, 0, 0,};Matrix a = {1, 0, 0, 0,int(1ll * x * x % mod), int(1ll * x * x % mod), 1, x,int(1ll * y * y % mod), int(1ll * y * y % mod), 0, 0,int(2ll * x * y % mod), int(2ll * x * y % mod), 0, y};n -= 2;while (n) {if (n & 1) {ans = ans * a;}a = a * a;n >>= 1;}printf("%d\n", ans.a[0][0]);}}return 0;
}

P5175 数列(矩阵快速幂)相关推荐

  1. HDU4549 M斐波那契数列(矩阵快速幂+费马小定理)

    Problem Description M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) ...

  2. UVA10689 Yet another Number Sequence【数列+矩阵快速幂】

    Let's define another number sequence, given by the following function: f(0) = a f(1) = b f(n) = f(n ...

  3. HDU 4549 M斐波那契数列(矩阵快速幂费马小定理)

    ps:今天和战友聊到矩阵快速幂,想到前几天学长推荐去刷矩阵专题,挑了其中唯一一道中文题,没想到越过山却被河挡住去路... 题目链接:[kuangbin带你飞]专题十九 矩阵 R - M斐波那契数列 T ...

  4. 斐波那契数列矩阵快速幂

    题意 用矩阵乘法求fibonacci数列的第n项. Solution 矩乘入门题啊,题目把题解已经说的很清楚里= =. 矩乘其实很简单,通过自己YY或者是搜索对于一个递推公式求出它所对应的矩阵,然后套 ...

  5. Fibonacci数列 矩阵快速幂

    点击打开链接 问题 A: 一道简单的Fibonacci 时间限制: 1 Sec  内存限制: 32 MB 题目描述 有如下数列:F(0) = 7, F(1) = 11, F(n) = F(n - 1) ...

  6. HDU4549 M斐波那契数列 —— 斐波那契、费马小定理、矩阵快速幂

    题目链接:https://vjudge.net/problem/HDU-4549 M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Li ...

  7. hdu 4549 M斐波那契数列(费马小定理 + 二分快速幂 + 矩阵快速幂)

    M斐波那契数列                                                                           Time Limit: 3000/1 ...

  8. 矩阵快速幂及斐波那契数列模板

    本篇博客先给出矩阵快速幂以及利用矩阵快速幂求斐波那契数列的模板,讲解待更新-- const int N=10; int tmp[N][N]; void multi(int a[][N],int b[] ...

  9. 牛客18987 粉嘤花之恋(矩阵快速幂、斐波那契数列)

    链接:https://ac.nowcoder.com/acm/problem/18987 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  10. 矩阵快速幂求斐波那契数列(初学整理)

    参考文章: http://blog.csdn.net/u013795055/article/details/38599321 http://blog.csdn.net/g_congratulation ...

最新文章

  1. Cracking the coding interview--Q2.2
  2. mysql利用CPU多核
  3. MPLS 成为连接到云的绝佳方法的4个原因
  4. java文件复制速度_【Java】Java代码拷贝文件的速度
  5. python存文件的模块_python模块之StringIO/cStringIO(内存文件)
  6. numpy : numpy.random
  7. drupal7 payment module:把支付form元素注入到form中
  8. 读取.properties配置文件(转载)
  9. linux代码折叠,Sublime代码折叠
  10. 推荐一个管理微信好友及微信群的微信机器人管理软件
  11. 电子设计大赛-仪器仪表类题目分析
  12. lending club 贷款逾期分析
  13. jquery视频播放器_jQuery插入QuickTime视频播放器
  14. jquery.ajaxSetup()函数详解
  15. 创业公司的的股权安排
  16. uandroidtool登录不了_UAndroidTool手机维修助手官方版
  17. SpringBoot--Filter过滤器(一)
  18. 在桌面Linux环境下开发图形界面程序的方案对比
  19. ABLIC推出用于汽车的S-19246系列10V工作电压和2000mA高输出电流LDO稳压器
  20. SQLite学习笔记(八)-- BLOB数据的插入与查询(C++实现)

热门文章

  1. python人脸识别训练模型生产_深度学习-人脸识别DFACE模型pytorch训练(二)
  2. composer切换源_Composer具体安装方法
  3. mongodb spring 超时时间_拥抱NoSQL--谈Spring Data MongoDB的简单使用
  4. 假如有人在今天炸了支付宝的存储服务器...
  5. 一晚啪了5只喵,累到在医院打点滴,这中国喵把英国人看傻了 | 今日最佳
  6. 学好数学建模,走哪买菜都不怕!
  7. 为什么离开学校后,学习能力直线下降?
  8. python删除列表中的重复值_如何从 Python 列表中删除重复项
  9. php mysql管理_MySQL 连接与管理
  10. linux图形界面鼠标变成小手_加载Linux系统,树莓派变身桌面电脑