首页 > 其他分享 >乘法逆元

乘法逆元

时间:2024-01-29 17:37:50浏览次数:34  
标签:pmod cdot 逆元 ax 乘法 equiv

乘法逆元

定义

对于一个线性同余方程 \(ax \equiv 1 \pmod p\),称 \(x\) 为 \(a \bmod p\) 下的逆元,可记作 \(a^{-1}\)。

求法

快速幂求逆元

我们需要使用费马小定理:

\[\begin{aligned} ax &\equiv 1 \pmod p\\ ax &\equiv a^{p - 1} \pmod p \\ x &\equiv a^{p - 2} \pmod p \end{aligned} \]

那么我们就可以直接使用快速幂求解了。

扩展欧几里得求逆元

考虑将 \(ax \equiv 1 \pmod p\) 化成 \(ax + by = c\) 的形式。显然有 \(ax + kp = 1\),那么直接带入扩展欧几里得求解即可。

线性递推

可以在 \(\mathcal{O(n)}\) 的时间复杂度内预处理出逆元。

令 \(p = k \cdot a + b\),有 \(k \cdot a + b \equiv 0 \pmod p\),此时为了构造出 \(a^{-1}\),我们可以巧妙地给式子乘上一个 \(a^{-1} \cdot b^{-1}\),则 \(k \cdot b^{-1} + a^{-1} \equiv 0 \pmod p\),移项,\(a^{-1} \equiv -\lfloor \frac{p}{a} \rfloor \cdot (p \bmod a)^{-1} \pmod p\),那么我们就可以愉快地递推了。

$\tt{Link}$
inv[0] = 1;
for (int i = 1; i <= n; ++ i )
	inv[i] = (p - p / i) * inv[p % i] % p;

标签:pmod,cdot,逆元,ax,乘法,equiv
From: https://www.cnblogs.com/songszh/p/17994957/niyuan

相关文章

  • exgcd+乘法逆元相关笔记
    #include<iostream>#include<cstdio>usingnamespacestd;constintpass=0;//exgcd://求解二元一次不定方程//ax+by=(a,b)=(b,a%b)=bx'+(a%b)*y'=bx'+(a-b*(a/b))*y'=b*(x'-(a/b)*y')+ay'//则有y=(x'-(a/b)*y'),x=y'......
  • (坚持每天写算法)算法复习和学习part1基础算法part1-9高精度乘法
    这一道题的思路和之前都是一样的,仍然是按照算式进行模拟的,这里就直接贴代码了:#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<algorithm>usingnamespacestd;//总结:vector,size,string,size,vector[i],string[i];vector&......
  • (坚持每天都写算法)算法复习与学习part1基础算法1.8高精度乘法
    这道知识点有点特殊,我当初在学的时候是只学了高精度*高精度,然后其他的我还没有想法,今天就来学学。有大概6天没有写新博客,主要是实习面试和期末考,实习面试没有过关,姐姐朋友推荐我先去刷一下面试题,叫我重温一下之前的知识,然后去参考一下开源项目,我决定边复习边写博客,就这样......
  • 用C#实现最小二乘法(用OxyPlot绘图)✨
    最小二乘法介绍✨最小二乘法(LeastSquaresMethod)是一种常见的数学优化技术,广泛应用于数据拟合、回归分析和参数估计等领域。其目标是通过最小化残差平方和来找到一组参数,使得模型预测值与观测值之间的差异最小化。最小二乘法的原理✨线性回归模型将因变量(y)与至少一个自变量......
  • [国家集训队] 矩阵乘法 整体二分
    [国家集训队]矩阵乘法题目描述给你一个\(n\timesn\)的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第\(k\)小数。输入格式第一行有两个整数,分别表示矩阵大小\(n\)和询问组数\(q\)。第\(2\)到第\((n+1)\)行,每行\(n\)个整数,表示这个矩阵。第\((i+1)\)行......
  • hdu 4990 Reading comprehension(矩阵乘法)
    Readtheprogrambelowcarefullythenanswerthequestion.pragmacomment(linker,"/STACK:1024000000,1024000000")includeincludeincludeincludeincludeincludeconstintMAX=100000*2;constintINF=1e9;intmain(){intn,m,ans,i;while(sc......
  • 矩阵乘法 - CF678D Iterated Linear Function
    CF678DIteratedLinearFunction题意\(f_{i,x}=A\timesf_{i-1,x}+B\)且\(f_{0,x}=x\)求\(f_{n,x}\)。思路这道题的递推关系十分清晰。但由于数据范围大(\(1\leA,B,x\le10^9,1\len\le10^{18}\)),所以这道题只能使用矩阵乘法加速递推。矩阵的构造我们需要构造一个......
  • 矩阵乘法代码
    voidMatrixChain(intp[],intn,int**m,int**s){for(inti=1;i<=n;i++)m[i][i]=0;//初始化for(intr=2;r<=n;r++){for(inti=1;i<=n-r+1;i++){intj=i+r-1;m[i][j......
  • #yyds干货盘点# LeetCode程序员面试金典:复数乘法
    题目复数可以用字符串表示,遵循"实部+虚部i"的形式,并满足下述条件:实部是一个整数,取值范围是[-100,100]虚部也是一个整数,取值范围是[-100,100]i2==-1给你两个字符串表示的复数num1和num2,请你遵循复数表示形式,返回表示它们乘积的字符串。 示例1:输入:num1="1......
  • 模p下的乘法逆元
    defextended_gcd(a,b):"""扩展欧几里得算法,返回(gcd(a,b),x,y)其中a*x+b*y=gcd(a,b)"""ifa==0:returnb,0,1else:g,x,y=extended_gcd(b%a,a)returng,y-(b//a)*x,x......