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

乘法逆元

时间:2024-07-23 15:52:32浏览次数:10  
标签:int pmod 逆元 线性 ax 乘法 equiv

定义

如果一个线性同余方程
\(ax \equiv 1 \pmod b\),
则 \(x\) 称为 \(a \bmod b\) 的逆元,记作 \(a^{-1}。\)

前置知识 $ax \equiv 1 \pmod b$, $\equiv $ 表示`(a * x ) % b == 1%b`

求法:

扩展欧几里得法
void exgcd(int a, int b, int& x, int& y) {
  if (b == 0) {
    x = 1, y = 0;
    return;
  }
  exgcd(b, a % b, y, x);
  y -= a / b * x;
}
前置知识
线性同余方程
定义

形如

\(ax\equiv b\pmod n\)
的方程称为 线性同余方程(Linear Congruence Equation)。其中,$a、b $和 \(n\) 为给定整数,\(x\) 为未知数。需要从区间 \([0, n-1]\) 中求解 \(x\),当解不唯一时需要求出全体解。
image

线性求逆元

求出 \(1,2,\dots,n\) 中每个数关于 p 的逆元。

如果对于每个数进行单次求解,以上两种方法就显得慢了,很有可能超时,所以下面来讲一下如何线性\((O(n))\)求逆元。

首先,很显然的 \(1^{-1} \equiv 1 \pmod p;\)
对于 \(\forall p \in \mathbf{Z},有 1 \times 1 \equiv 1 \pmod p\) 恒成立,故在 p 下 1 的逆元是 1,而这是推算出其他情况的基础。
image
实现

inv[1] = 1;
for (int i = 2; i <= n; ++i) {
  inv[i] = (long long)(p - p / i) * inv[p % i] % p;
}

标签:int,pmod,逆元,线性,ax,乘法,equiv
From: https://www.cnblogs.com/Kang-shifu/p/18318612

相关文章

  • NumPy 连续矩阵乘法向量化
    我有一个NumPy数组ar形状(M,L,N,N)我想连续乘以L(N,N)矩阵(multiplied_ar[m]=ar[m,0,:,:]@ar[m,1,:,:]@...)以获得形状数组(M,N,N)是否有可能|||向量化以某种方式这样我就不必迭代和......
  • 定点数补码乘法运算
    补码乘法的理论推导根据上述理论推导,我们可以得知,\([x]_{补}*[y]_{补}\neq[x*y]_{补}\),在计算补码的乘法时,我们应该减去乘数的符号位乘以其对应的位权乘以被乘数原码的符号位是不参与运算的,而补码的符号位是参与运算的,并且在最后是减去乘数的符号位乘以其对应的位权乘以被......
  • 定点数原码乘法运算
    手算二进制乘法我们可以分别计算被乘数和乘数每一位的乘积,乘以对应的位权然后把它们加起来,乘以对应位权这个操作我们可以通过逻辑移位来实现而对于符号位的处理,我们可以首先不考虑符号位,取两个数字的绝对值进行相乘,在运算完成之后,对运算结果的符号位进行修改原码二进制乘......
  • OpenCV图像处理——霍夫圆检测与最小二乘法拟合圆
    HoughCircles:霍夫圆检测voidHoughCircles(InputArrayimage,OutputArraycircles,intmethod,doubledp,doubleminDist,doubleparam1=100,doubleparam2=100,intminRadius=0,intmaxRadius=0);image:输入,8-bit单通道灰度图circles:输出,vector,含有3或......
  • 浙大数据结构慕课课后习题(02-线性结构2 一元多项式的乘法与加法运算)
    题目要求设计函数分别求两个一元多项式的乘积与和。输入格式:输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出格式:输出分2行,分别以指数递降方式输出乘积多项式以及和多项......
  • 【案例详解】1. Python实现九九乘法表的24种方法
    【案例详解】1.Python实现九九乘法表的24种方法Python实现九九乘法表的24种方法案例详细讲解一、基础方法(嵌套循环)二、列表推导式三、函数封装四、使用`map`函数五、列表嵌套六、使用`itertools`库七、使用字符串格式化八、使用`format`方法九、递归实现十、使用`for`和......
  • 【模板】多项式乘法逆
    变量的值被莫名修改,往往是因为地址的传递导致两个变量绑定在了一起怎样搜索替换double为longdouble呢?或许可以先转化为longDouble,再转化为longdouble点击查看代码#include<bits/stdc++.h>usingnamespacestd;longlonga[300005],tmp[300005];longlongf0[300005],......
  • 牛客周赛 Round50 E-小红的树上移动 (期望dp+逆元)
    E-小红的树上移动题目:题意:在一个树上从根节点移动,每次都会向更深的下一层走,如果此时已经是叶子节点没有下一层就会停留在这里。求出移动次数的期望,移动次数就是从根节点1开始到此节点的深度。思路:画一个草图不难看出其实在同一层中,到达每个点的概率是一样的。并且,对于每一层......
  • c++ u7-02-高精度乘法
    本节课作业:链接:https://pan.baidu.com/s/13-FC86jSHGziRDA8lqzimg?pwd=owv1提取码:owv1   高精度乘法             #include<iostream>#include<cstdio>#include<cstring>usingnamespacestd;stringx,y;inta......
  • 高精度乘法的实现
             这是C++算法基础-基础算法专栏的第九篇文章,专栏详情请见此处。引入        上次我们学习了高精度加法的实现,这次我们要学习高精度减法的实现。        高精度乘法与高精度加法的定义、前置过程都是大致相同的,如果想了解具体内容,可以移......