ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

矩阵乘法和龟速乘这样写!

2021-10-13 19:35:55  阅读:215  来源: 互联网

标签:龟速 11 10 ll 矩阵 mul 乘法 mod


P1707 刷题比赛

明显的矩阵乘法题。

模数很大,要用龟速乘。

写法

矩阵写在结构体里,不要用重载运算符结构体内写乘法函数

下面有龟速乘的模板

//头文件省略
ll n,mod;
#define madd(a,b) {a=((a+b)%mod+mod)%mod;}
#define mmul(a,b) {a=(a*b%mod+mod)%mod;}
inline ll cheng(ll a,ll b){//龟速乘
	ll res=0;
	a%=mod;
	b%=mod;
	while(b){
		if(b&1){
			madd(res,a);
		}
		b>>=1;
		a=(a<<1)%mod;
	}
	return res;
}
struct matrix{
	ll m[11][11];
	matrix mul(matrix x){
		matrix res;
		ll ans;
		For(i,0,10){
			For(j,0,10){
				ans=0;
				For(k,0,10){
					madd(ans,cheng(m[i][k],x.m[k][j]));
				}
				res.m[i][j]=ans;
			}
		}
		return res;
	}
}a,b,c;
void pw(ll x){
	For(i,0,10) b.m[i][i]=1;
	while(x>0){
		if(x&1){
			b=b.mul(a);
		}
		x>>=1;
		a=a.mul(a);
	}
}
signed main(){
	IOS;
	ll p,q,r,t,u,v,w,x,y,z;
	cin>>n>>mod>>p>>q>>r>>t>>u>>v>>w>>x>>y>>z;
	ll t1[11][11]={
	{p,1,1,0,1,0,0,0,0,0,0},
	{q,0,0,0,0,0,0,0,0,0,0},
	{1,0,u,1,1,0,0,0,0,0,0},
	{0,0,v,0,0,0,0,0,0,0,0},
	{1,0,1,0,x,1,0,0,0,0,0},
	{0,0,0,0,y,0,0,0,0,0,0},
	{r,0,0,0,0,0,1,0,0,0,0},
	{t,0,0,0,1,0,2,1,0,0,0},
	{0,0,1,0,0,0,0,0,w,0,0},
	{0,0,0,0,1,0,0,0,0,z,0},
	{1,0,0,0,2,0,1,1,0,0,1}
	};
	For(i,0,10)
		For(j,0,10)
			a.m[i][j]=t1[i][j];
	pw(n-2);
	ll t2[11][11]={
	{3,1,3,1,3,1,1,1,w,z,1},
	{0,0,0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0,0,0,0}
	};
	For(i,0,10)
		For(j,0,10)
			c.m[i][j]=t2[i][j];
	c=c.mul(b);
	cout<<"nodgd "<<c.m[0][0]<<"\nCiocio "<<c.m[0][2]<<"\nNicole "<<c.m[0][4]<<"\n";
    return 0;
}

标签:龟速,11,10,ll,矩阵,mul,乘法,mod
来源: https://www.cnblogs.com/zhangshaojia/p/15403871.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有