首页 > 其他分享 >矩阵快速幂--模板

矩阵快速幂--模板

时间:2023-09-12 11:38:43浏览次数:36  
标签:node -- 矩阵 long cheng ans include 模板


http://acm.bit.edu.cn/mod/programming/view.php?id=670


The Little Architect II


#include<stdio.h>
#include<string.h>

//dp方程:f[n]=3*f[n-1]+3*f[n-2]-f[n-3];
//矩阵快速幂  。。  模板
//构造矩阵
// 3 1 0
// 3 0 1
//-1 0 0
struct node
{
	long long a[3][3];
};

long long n,p;
node cheng(node A,node B)
{
	node C;
	memset(C.a,0,sizeof(C.a));
	int i,j,k;
	for(i=0;i<3;i++)
		for(j=0;j<3;j++){
			for(k=0;k<3;k++)
				C.a[i][j]+=A.a[i][k]*B.a[k][j];
			C.a[i][j]%=p;
		}
	return C;
}

int main()
{
	int i,j,k;
	node I,T;
	
	while(~scanf("%lld%lld",&n,&p))
	{
		long long b[3]={2,9,32};
		for(i=0;i<3;i++)
			for(j=0;j<3;j++)
				if(i==j) I.a[i][j]=1;
				else I.a[i][j]=0;
		memset(T.a,0,sizeof(T.a));
		T.a[0][0]=3,T.a[1][0]=3,T.a[2][0]=-1;
		T.a[0][1]=1,T.a[1][2]=1;
		if(n<=3)
			printf("%lld\n",b[n-1]%p);
		else
		{
			n-=3;
			while(n>0)
			{
				if(n&1==1) I=cheng(I,T);
				n>>=1;
				T=cheng(T,T);
			}
			long long ans=(b[2]*I.a[0][0]+b[1]*I.a[1][0]+b[0]*I.a[2][0])%p;
			if(ans<0) ans+=p;
			printf("%lld\n",ans);
		}
	}
}







标签:node,--,矩阵,long,cheng,ans,include,模板
From: https://blog.51cto.com/u_16244339/7443639

相关文章

  • 亚马逊API接口解析,实现获得AMAZON商品详情
    要解析亚马逊API接口并实现获取亚马逊商品详情,你需要按照以下步骤进行操作:了解亚马逊开发者中心:访问亚马逊开发者中心,并了解相关的API文档、开发者指南和规定。注册开发者账号:在亚马逊开发者中心上注册一个开发者账号,并创建一个应用,获取到API权限。获取API密钥:为了使用亚马逊API接......
  • 最小生成树---模板
    最基础模板#include<stdio.h>#include<string.h>#include<algorithm>usingnamespacestd;#defineV110//点的个数#defineE5100//边的个数intparent[V];introot(intp){ if(parent[p]==-1)returnp; elsereturnparent[p]=root(parent[p]);}void......
  • 欧拉函数--模板
    欧拉函数--模板//求1..n-1中与n互质的数的个数inteular(intn){ intret=1,i; for(i=2;i*i<=n;i++) if(n%i==0){ n/=i,ret*=i-1; while(n%i==0) n/=i,ret*=i; } if(n>1) ret*=n-1; returnret;}......
  • 【转载】MSSQL @@ERROR 使用
    mssql@@ERROR使用mssql@@ERROR是一个系统保存的整型变量,它是用来保存上一次Transact-SQL语句执行时发生错误的错误代码。可以使用SELECT@@ERROR查看该变量的值。它通常用在TRY-CATCH块中,在CATCH块中将错误信息输出到日志或者显示给用户。下面通过两个示例来说明如何使用mssq......
  • 素数打表
    #defineN50000//质数范围intprime[1000000];//prime[0]=2,prime[1]=3,prime[2]=5,……voidinit_prime(){inti,j;for(i=2;i<=sqrt(N*1.0);++i){if(!prime[i])for(j=i*i;j<N;j+=i)......
  • 如何把Mysql注册为Windows服务
    我们在使用Mysql的时候,经常需要在命令行中开启mysql。如果把mysql做成服务的话会方便很多,下面小编就给大家分享一下如何把Mysql注册为Windows服务。操作方法01首先在cmd命令行中通过cd命令进入mysql的bin目录,这个目录下面有要使用的注册服务的命令,如下图所示02然后通......
  • 快速幂模板
    参数数据类型,可改为来longlong,__int64.//m^n%kintquickpow(intm,intn,intk){intb=1;while(n>0){if(n&1)b=(b*m)%k;n=n>>1;m=(m*m)%k;}returnb;}......
  • Python - 接口自动化(Requests)
    1、requests简介如果想用python做接口测试,我们首先有不得不了解和学习的模块。它就是python的第三方模块:Requests。虽然Python内置有urllib模块用于访问网络资源。但是,它用起来比较麻烦,而且,缺少很多实用的高级功能。所以呢更好的方案是使用requests。它也是目前应用最广泛、最......
  • 二叉树 遍历 hdu-1710-Binary Tree Traversals
    给出二叉树的前序遍历和中序遍历,求后序遍历。。 算法:由前序遍历的第一个元素可确定左、右子树的根节点,参照中序遍历又可进一步确定子树的左、右子树元素。如此递归地参照两个遍历序列,最终构造出二叉树。 由前序和中序结果求后序遍历结果树的遍历: 给你一棵树的先......
  • Python数据类型之字符串(String)
    Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。Python中常用的数据类型有6种,分别是:数字(Number)、字符串(String)、列表(List)、元组(Tuple)、字典(Dictionary)、集合(Set)。字符串(String)Python中的字符串用单引号''或者双引号""括起......