首页 > 其他分享 >矩阵乘法 - CF678D Iterated Linear Function

矩阵乘法 - CF678D Iterated Linear Function

时间:2024-01-14 10:55:55浏览次数:38  
标签:Function arr end Linear int 矩阵 begin Iterated bmatrix

CF678D Iterated Linear Function

题意

\(f_{i,x}=A\times f_{i-1,x} + B\) 且 \(f_{0,x}=x\) 求 \(f_{n,x}\)。

思路

这道题的递推关系十分清晰。但由于数据范围大(\(1\le A,B,x\le 10^ 9,1\le n \le 10^{18}\)),所以这道题只能使用矩阵乘法加速递推。

矩阵的构造

我们需要构造一个矩阵 \(P\),使得 \(\begin{bmatrix} f_{0,x}& b\\ 0&0 \end{bmatrix}\times P= \begin{bmatrix} f_{1,x}&b\\ 0&0 \end{bmatrix}\)。根据矩阵乘法的规则,我们可以很容易地推出 \(P=\begin{bmatrix} A&0\\ 1&1\end{bmatrix}\)。由于 \(f_{0,x}=x\),所以要得到 \(f_{n,x}\) 就可以转化为求 \(\begin{bmatrix} x& b\\ 0&0 \end{bmatrix}\times P^n = \begin{bmatrix} f_{n,x}&b\\ 0&0 \end{bmatrix}\),使用矩阵快速幂解决。

code

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod = 1e9 + 7;
int m, n, x, y, a, b;
struct arr {
	int a[15][15];
	arr() {memset(a, 0, sizeof a);}
	arr operator*(const arr& B) const {//重载乘法
		arr cur;
		int r;
		for (int i = 1; i <= 2; ++i)
			for (int k = 1; k <= 2; ++k) {
				r = a[i][k];
				for (int j = 1; j <= 2; ++j)
					cur.a[i][j] += B.a[k][j] * r, cur.a[i][j] %= mod;
			}
		return cur;
	}
	arr operator^(int x) const {//重载快速幂
		arr cur, res;
		for (int i = 1; i <= 2; ++i) cur.a[i][i] = 1;
		for (int i = 1; i <= 2; ++i)
			for (int j = 1; j <= 2; ++j) res.a[i][j] = a[i][j] % mod;
		while (x) {
			if (x & 1) cur = cur * res;
			res = res * res;
			x >>= 1;
		}
		return cur;
	}
} A, F;//A对应上文中的P矩阵,F为答案矩阵
int mode(int x, int m) {return (x + m) % m;}
void init() {//初始化
	A.a[1][1] = a, A.a[1][2] = 0;
	A.a[2][1] = 1, A.a[2][2] = 1;
	F.a[1][1] = x, F.a[1][2] = b;
	F = F * (A ^ n);
}
signed main() {
	scanf("%lld%lld", &a, &b);
	scanf("%lld", &n);
	scanf("%lld", &x);
	init();
	printf("%lld", mode(F.a[1][1], mod));
	return 0;
}

标签:Function,arr,end,Linear,int,矩阵,begin,Iterated,bmatrix
From: https://www.cnblogs.com/Ice-lift/p/17963441

相关文章

  • 500mA High Voltage Linear Charger with OVP/OCP
    一、GeneralDescriptionYHM2810isahighlyintegrated,single-cellLi-ionbatterychargerwithsystempowerpathmanagementforspace-limitedportableapplications.ThefullchargerfunctionfeaturesTrickle-charge,constantcurrentfastchargeandconstant......
  • SQL Server报错The datediff function resulted in an overflow
    建模提醒功能异常,获取查询语句到数据库执行报错:Msg535,Level16,State0,Line62Thedatedifffunctionresultedinanoverflow.Thenumberofdatepartsseparatingtwodate/timeinstancesistoolarge.Trytousedatediffwithalessprecisedatepart.消息535,级......
  • 关于函数式接口中常用的Supplier、Consumer、predicate、Function的总结以及其使用场
    首先介绍一下函数式接口:函数式接口在Java中是指:有且仅有一个抽象方法的接口。函数式接口,即适用于函数式编程场景的接口。而Java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导......
  • PyTorch 基础篇(2):线性回归(Linear Regression)
    #包importtorchimporttorch.nnasnnimportnumpyasnpimportmatplotlib.pyplotasplt#超参数设置input_size=1output_size=1num_epochs=60learning_rate=0.001#Toydataset#玩具资料:小数据集x_train=np.array([[3.3],[4.4],[5.5],[6.71],[......
  • [Codeforces] CF1538F Interesting Function
    CF1538FInterestingFunction题目传送门题意给定两个正整数\(l,r\)(\(l<r\)),将\(l\)不断加\(1\)直到\(l=r\),求出这一过程中\(l\)发生变化的位数总数。位数变化指:\(l=909\),将\(l+1\)后有\(2\)位数字发生变化。\(l=9\),将\(l+1\)后也有\(2\)位数字发生变......
  • 函数式接口@FunctionInterface
    有以下特点:1.该注解只能标记在“有且仅有一个抽象方法”的接口上。2.JDK8接口中的静态方法和默认方法,都不算事抽象方法。3.接口默认继承java.lang.Object,所以如果接口显示声明覆盖了Object中方法,那么也不算抽象方法。4.该注解不是必须的,如果一个接口符合“函数式接口”定义,那么加不......
  • JavaScript | Variable、Function、Module、Class (一)
    函数函数声明functionsayHello(){return"HelloJavaScript!!"}函数表达式letsayHello=function(){return"HelloJavaScript!!"}函数、变量提升:函数和变量都会被提升,且函数会被优先提升;提升的意思是只要有声明定义,那么先调用都可以。因为JS会把定义放到......
  • PBKDF2(Password-Based Key Derivation Function 2)算法
    一、引言在当今数字时代,保护用户数据和隐私的安全变得越来越重要。为实现这一目标,加密和密钥管理技术发挥着关键作用。PBKDF2(Password-BasedKeyDerivationFunction2)算法作为一种基于密码的密钥生成方法,广泛应用于各种安全场景。本文将从各个方面介绍和解释PBKDF2算法,剖......
  • Multivariate Function in Mathematics Education: 30 Engaging Blog Posts for Teach
    1.背景介绍在数学教育领域,多变量函数是一个非常重要的概念。它们在许多实际应用中发挥着关键作用,例如经济学、生物学、物理学等领域。然而,在教育中,多变量函数的教学和学习往往受到一些挑战。这篇博客文章将探讨如何通过30个有趣的博客帖子来提高多变量函数在数学教育中的教学质量。......
  • 神奇的 SQL ,高级处理之 Window Functions → 打破我们的局限!
    开心一刻今天儿子跟老婆聊天儿子:妈妈,我为什么没有两个爸爸呀老婆:每个人都只有一个爸爸呀,你看谁有两个爸爸了儿子一脸真诚的看着老婆:那你为什么就有两个爸爸呢老婆一脸疑惑的望向儿子:我哪有两个爸爸了?儿子有点不服气,温柔地说道:你管爷爷叫爸爸,你管姥爷还叫爸......