[T]快速幂

编程入门 行业动态 更新时间:2024-10-24 20:11:57

[T]<a href=https://www.elefans.com/category/jswz/34/1771431.html style=快速幂"/>

[T]快速幂

前置

取模运算 % \% %,就是取余

快速幂

快速运算 a k a^k ak,尤其 k k k较大时
从原先 O ( k ) O(k) O(k)优化至 O ( l o g 2 n ) O(log_2n) O(log2​n)

ll quick_mul(ll a,ll k)
{ll ans=1;while(k){if(k&1)ans=ans*a%mod;a=a*a%mod;k>>=1;}return ans;
}//这里常用一个函数来写,因为会经常调用

模板题

EX

乘法逆元

板子题
(费马小定理)大部分情况下 a − 1 ≡ a p − 2 ( m o d p ) a^{-1}\equiv a^{p-2}(mod\ p) a−1≡ap−2(mod p)
至于为什么是大部分情况,一般不考虑,除非出题人脑子有坑
推销:我古老的博客和另一份古老的博客
模数p一般为998244353(一个大质数)

番外

矩阵快速幂

前置矩阵处理(学会这个你就会线性代数了,或者线性代数学会了就会这part)

矩阵乘法

c i , j = ∑ k = 1 n a i , k b k , j c_{i,j}=\sum_{k=1}^n a_{i,k}b_{k,j} ci,j​=k=1∑n​ai,k​bk,j​

重载

将原本有的符号重新定义

struct sq{long long num[102][102];sq(){memset(num,0,sizeof(num));}
};
sq operator *(sq a,sq b)//重新定义一个对于结构体sq矩阵的乘法
//基本格式:返回类型 operator 符号(所需参数)
{sq ans;for(int k=1;k<=n;k++)for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){ans.num[i][j]=(ans.num[i][j]+a.num[i][k]*b.num[k][j]%mod)%mod;}}return ans;
}
//于是乎,正常的快速幂板子就可以用了
sq quick_mul(sq a,ll k)
{sq ans=1;while(k){if(k&1)ans=ans*a;a=a*a;k>>=1;}return ans;
}

或者你也可以不用重载,直接用函数达到相同效果

更多推荐

[T]快速幂

本文发布于:2023-12-03 20:48:49,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1657497.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:快速

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!