首页 > 其他分享 >模p下的乘法逆元

模p下的乘法逆元

时间:2024-01-04 12:44:06浏览次数:23  
标签:inverse gcd extended 逆元 乘法 mod

def extended_gcd(a, b):
    """
    扩展欧几里得算法,返回 (gcd(a, b), x, y) 其中 a*x + b*y = gcd(a, b)
    """
    if a == 0:
        return b, 0, 1
    else:
        g, x, y = extended_gcd(b % a, a)
        return g, y - (b // a) * x, x

def mod_inverse(a, p):
    """
    计算模 p 下的乘法逆元,即 a * x ≡ 1 (mod p)
    """
    a = a % p  # 将负数转换为其在模 p 下的等效正数
    g, x, _ = extended_gcd(a, p)
    if g != 1:
        raise ValueError(f"{a} 在模 {p} 下没有乘法逆元")
    else:
        return x % p

# 例子:计算模 17 下的乘法逆元,其中 a 是任意整数(包括负数)
a = 11
p = 23

inverse = mod_inverse(a, p)

print(f"模 {p} 下 {a} 的乘法逆元是 {inverse}")

运行结果

模 17 下 11 的乘法逆元是 14

标签:inverse,gcd,extended,逆元,乘法,mod
From: https://www.cnblogs.com/u5bf/p/17944997

相关文章

  • 输一个个数,想要的乘法口诀表 函数实现
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>voidchengfa(inta){ for(inti=1;i<=a;i++) { for(intj=1;j<=i;j++) { printf("%d*%d=%-6d",j,i,j*i); } printf("\n"); }}intmain(){ inta=......
  • 最小二乘法在机器学习中的挑战与创新
    1.背景介绍最小二乘法(LeastSquares)是一种常用的优化方法,广泛应用于多种领域,尤其是机器学习和数据科学中。在机器学习中,最小二乘法主要用于解决线性回归问题,即找到一条直线(或多项式),使得数据点与这条直线(或多项式)之间的距离最小化。这种方法的优点是简单易行,具有良好的稳定性和准确......
  • 乘法逆元
    概念若关于整数\(a,b\)的线性同余方程\(ax≡1\pmod{b}\)存在解,则将\(x\)称作\(a\bmodb\)的乘法逆元(简称逆元),记作\(a^{-1}\pmod{b}\),在不会引起误解时常记作\(a^{-1}\)当\(b|a\)(整除)时,不存在\(a\)的逆元\(a^{-1}\pmod{b}\)特别的,有\(1^{-1}≡1\pmod{b}\)......
  • 多项式的逆元
    对于多项式\(f(x)=a_0+a_1x+a_2x^2+...+a_nx^n\)若存在\(g(x)=b_0+b_1x+b_2x^2+...+b_mx^m(m\len)\)使得\(f(x)g(x)\equiv1\pmod{x^m}\),称\(g(x)\)为\(f(x)\)在模\(x^m\)下的逆元,记作\(f^{-1}(x)\pmod{x^m}\)多项式存在逆元的充要条件:\(a_0\)在模\(x^m\)下有......
  • 【模版】高精度乘法 (A*B problem)
    和A+Bproblem类似,不多说,直接看代码和注释就好啦!ww感觉这东西只要有个概念就行了...就是在练模拟?www其他语言似乎有大数加减乘除? 这样的高精度算法时间复杂度O(n2),n是数字位数,如果位数过大还是很慢。可以利用快速傅里叶变换的方式加速高精度乘法。(虽然都是我连傅里叶级数都没学......
  • 矩阵乘法和矩阵快速幂
    1机房今天晚上不知道为啥把洛谷也关了,AC自动机没题做了,教练您做的好啊那么就冲一个矩阵乘法和快速幂吧,开了提高OJ之后还有几道需要矩阵乘法的AC自动机没写,后面再冲一下状压虽然已经冲过了矩阵矩阵思想来源于线性方程组如方程组\[\begin{equation}\begin{cases}7x_1+8x_2+9x......
  • 乘法加法和代数计算如何算的快,准
    进位尽量用脑子来记忆,因为每一次进位只保存一个即可.进位跟下一个加完之后就更新了.所以记忆不难,多训练即可.举一个例子:135*87首先写下135  8775=35.所以脑子记住进位3,写下5.然后37=21,所以我们写上4,脑子记住2.1*7=7所以我们写下9就完事了.少写......
  • #P1052. 乘法逆元
    #include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intn,p;intgcd(inta,intb,int&x,int&y){ if(b==0){ x=1; y=0; returna; } intd=gcd(b,a%b,y,x); y-=a/b*x; returnd;}intinv(inta,intm){ intx,y; gcd(a,m,x......
  • 任意类型多项式乘法
    目录前言前置知识定义与记号单位根分圆多项式Cantor'sAlgorithm规避单位根递归计算卷积做\(\mathcal{I}_p\)上的DFT时间复杂度规避除法实现细节参考资料参考文献参考代码前言所谓“任意类型”,事实上指的是一种代数结构\(\mathcal{A}=(D,+,\cdot)\),满足:\(+:D\timesD\toD......
  • P1527 [国家集训队] 矩阵乘法
    题意给定一个矩阵,每次询问子矩阵的第\(k\)大。Sol考虑把莫队扔到二维上来做。发现复杂度变为:\(O(n^2q^{\frac{3}{4}})\)。卡卡常就过了。Code#include<iostream>#include<algorithm>#include<cstdio>#include<array>#include<cmath>#include<vector>#i......