算法笔记--逆元

密码学中模运算的逆元求解 对于正整数a和m,如果有ax≡1(modm),那么把这个同余方程中的x最小正整数解叫做a模x的逆元。 逆元一般用扩展欧几里得算法来求得,如果m为素数,那么还可以根据费马小定理得到逆元为。 推导过程: 详细见:欧拉定理与费马小定理 要了解欧拉定理,就要先了解欧拉函数: 首先什么是欧拉函数呢? 欧拉函数phi(n)就表示1-n中与n互质的数的个数 设Xi为1-n中与n互质的数(一共有phi(n... 阅读详情

逆元:(b/a)(mod m) = (b*x)(mod m)
x表示a的逆元,并且a*x=1(mod m) 注意:只有当a与n互质的时候才存在逆元
求逆元方法:
1.费马小定理
因为a^phi(m)=1(mod m),所以逆元为a^(phi(m)-1)(mod m)
特别地,如果m为质数,逆元为a^(m-2)(mod m)

2.扩展欧几里德
 //返回d=gcd(a,b);和对应于等式ax+by=d中的x,y
long long extend_gcd(long long a, long long b, long long &x, long long &y) {
    if (a==0 && b==0) return -1;//无最大公约数
    if (b == 0) { x = 1; y = 0; return a; }
    long long d = extend_gcd(b, a%b , y, x);
    y -= a/b*x;
    return d;
}
//求逆元素
//ax = 1(mod n)
long long mod_reverse(long long a, long long n) {
    long long x, y;
    long long d = extend_gcd(a, n, x, y);
    if (d == 1) return (x%n+n)%n;
    else return -1;
}

3.O(n)时间求逆的代码(MOD必须是素数)
long long inv[MAXN];
inv[1] = 1;
for (long long i = 2; i < MAXN; i++) {
    inv[i] = inv[MOD%i]*(MOD-MOD/i)%MOD;
}

4.有一种通用的求逆元方法,适合所有情况。公式如下:
(b/a)%m = b%(m*a)/a


#define LL long long
LL PowMod(LL a, LL b, LL MOD){
    LL ret = 1;
    while (b) {
        if (b&1) ret = (ret*a)%MOD;
        a = (a*a) % MOD;
        b >>= 1;
    }
    return ret;
}
LL mod_reverse(LL a,LL n){
    return PowMod(a,n-2,n);
}
//预处理出1-500的阶乘的逆元
//返回d=gcd(a,b);和对应于等式ax+by=d中的x,y
long long quipow(long long a,long long b)
{
    long long ans=1;
     while(b)
     {
         if(b&1) ans=ans*a%mod;
         b>>=1;
         a=a*a%mod;
     }
     return ans%mod;
}
//fact[i]的的逆元nv[i]
long long fac[505],inv[505];
void prepare()          ////阶乘逆元
{
    fac[0]=fac[1]=1;
    for(int i=2;i<=500;i++)   fac[i]=fac[i-1]*i%mod;

    inv[500]=quipow(fac[500],mod-2);
    for(int i=500-1;i>=0;i--) inv[i]=inv[i+1]*(i+1)%mod;
}
求逆元的C程序(算法) 用c语言实现逆元的计算,通过自己设计算法代码实现。 立即下载

相关推荐

Kaamel白皮书:Agent-to-Agent(A2A)隐私安全最佳实践

随着AI智能体架构从单体模型演化为多Agent协同系统,A2A协议为智能生态提供了强大的互操作能力。然而,能力越大,责任亦重。若无完备的隐私保护和安全防护体系,A2A将沦为数据泄露、滥权执行的温床。Kaamel作为专注于泛安全方向的Agent基础设施构建者,呼吁业界将“隐私工程”与“安全编排”作为A2A系统设计的核心前提,共建可信Agent生态,守护智能协同时代的数据主权与系统安全。未来,Kaamel计划发布一套“可信Agent协同蓝图”,涵盖:A2A协议适配Agent SDK工具集;

kaamelai的博客 1598

常用逆元总结

乘法逆元在mod运算里非常重要,一下总结一些常用的逆元,假设我们有式子: ans=abmod&ThinSpace;&ThinSpace;mans=\frac{a}{b}\mod mans=ba​modm 当m为素数p时,b的逆元为pow(b,m-2); 用快速幂计算该逆元即可 ans=abmod&ThinSpace;&ThinSpace;m=a×pow(b,m...

qq_42835440的博客 606

VMware虚拟机调用NVIDIA显卡全攻略:从3D加速到直通与vGPU

显卡虚拟化技术是虚拟化领域的关键组成部分,它通过在虚拟机中模拟或直接分配物理GPU资源,实现了图形渲染与通用计算的加速。其核心原理在于通过Hypervisor层对GPU指令进行拦截、转换或直接映射,从而平衡资源隔离与性能损耗。这项技术的核心价值在于提升资源利用率、实现计算环境隔离,并支持AI训练、3D渲染、科学计算等高性能负载的灵活部署。在应用场景上,轻量级图形界面加速、CUDA学习验证适合使用虚拟3D加速;而追求极致性能的机器学习训练、专业渲染则需依赖PCIe直通技术;对于企业级GPU资源池化与多租户共享

weixin_32308101的博客 1045

乘法逆元_三种方法

//方法一: 扩展欧几里得 (求逆元 调用mod_reverse函数) // 限定条件 a n 互质 log(n) // @a 数 // @n 模数 inline long long mod_reverse(long long a,long long n) { long long x,y,d=extend_gcd(a,n,x,y); if(d==1) { ...

weixin_30411997的博客 214

深入浅出ASAP2标准:手把手教你编写和解析A2L文件(含Python示例代码)

本文深入解析ASAP2标准下的A2L文件,涵盖基础概念、文件结构及Python实现代码,帮助开发者掌握汽车ECU标定和测量中的关键数据管理技术。通过详细示例,展示如何编写和解析A2L文件,提升电控数据管理效率。

happy2的博客 1100

LoRa项目实战:手把手教你为ESP32选配和焊接天线(从PCB到信号测试)

本文详细介绍了为ESP32选配和焊接LoRa天线的全流程,包括天线选型、PCB布局设计、焊接工艺及信号测试。重点解析了PCB板载天线、导线天线和陶瓷贴片天线的适用场景与性能特点,并提供专业的焊接技巧和信号测试方案,帮助开发者优化LoRa模块的无线通信性能。

weixin_30470643的博客 394

python实现shamir秘密共享算法

shamir算法介绍 拉格朗日插值解密 代码实现 用到的G_hash是国密算法SM3, g_p是Miller_Rabin算法生成大素数算法 ModReverse是生成逆元算法 from random import randint from algorithm.g_hash import G_hash from algorithm.g_keypairs import g_p, ModReverse """ 使用说明 只能加解密64位hash值 加密时, G_si(S,n,k) 加密数据S,给n个

weixin_44932880的博客 3300

DDR4技术原理详解

DDR4是DDR4-SDRAM的简写,即第4代DDR-SDRAM,DDR-SDRAM全称Double Date Rate Synchronous Dynamic Random Access Memory。本文重点解析DDR4技术规范及其背后的电子电路原理,以及编程使用DDR4过程中需要注意的性能事项。

ctbinzi的专栏 1万+

逆元的求法总结(3种基本方法+4种实现)

简述逆元 逆元(Inverse element)就是在mod意义下,不能直接除以一个数,而要乘以它的逆元。 比如a∗b≡1(modp)a∗b≡1(modp)a*b≡1 (mod p),那么a,b互为模n意义下的逆元,比如你要算x/a,就可以改成x*b%p 观察a∗b≡1(modp)a∗b≡1(modp)a*b≡1 (mod p),变形为a∗b+k∗p=1a∗b+k∗p=1a*b + k*p ...

少主大人殿下的博客 7万+

Unreal5从入门到精通之一文搞懂Unreal的C++代码编译之谜

我们在开发Unreal项目时,如果时蓝图模板的项目,一般问题不大,因为当你修改完蓝图,点击编译Compile+保存Save,就可以继续开发了。这对于开发者来说也非常友好。但是,如果你使用的C++模板开发项目,代码编译一切都变得魔幻起来,IDE(VS/Rider)里面有编译,编辑器里面也有编译,有什么区别呢?我们来列举几个新手常碰到的问题。1.代码我明明新建了,编辑器里怎么看不到?2.昨天我新家的功能运行的好好的,今天怎么感觉还是老逻辑。或者昨天加的新代码,新蓝图不见了。

TxNet 1606

AWS DevOps Agent 完全指南

AI 驱动的 SRE 队友,7×24 自主调查告警、定位根因、生成修复方案、预防未来故障。

探索云原生与智能化驱动下的安全运维新范式。关注DevSecOps、可观测性、AIOps等前沿领域,与您共赴技术前沿。 384

乘法逆元笔记(C++ 算法竞赛向)

定义:若,则称x为a在模p意义下的乘法逆元,记作a⁻¹。(即a与p互质)

2401_88063487的博客 725

【乐企-工具篇】有关乐企发票文件生成- OFD和PDF文件生成

有关乐企发票文件生成-OFD和PDF文件生成

九七的博客 2054

算法笔记【乘法逆元】

乘法逆元的基本介绍,这里只涉及算法竞赛的内容,不包括其他方面。 制作不易,点个赞再走吧

iwant_的博客 1739

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【算法笔记】逆元的求解

1.逆元(Inverse element) 定义:对于正整数a和m,如果有a⋅x≡1(modm),那么把这个同余方程中x的最小正整数解叫做a模m的逆元。 应用:当计算(a/b)%m时不能直接算(double)%(int),要转化成(a*c)%m,其中c是b的逆元 证明如下: 设c是b的逆元,则有b*c≡1(mod m); 则(a/b)%m = (a/b)*1%m = (a/...

Cassie_zkq的博客 958

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【算法笔记】组合数学-浅谈乘法逆元

目录前言说明栗子计算逆元解决方法例题1-小y的组合数取模问题DescriptionInputOutputDataSolutionCode例题2-乘法序列DescriptionInputOutputDataSolutionCode 前言 在 OIOIOI 中,大多数情况下,善良的出题人为了避免高精度等大整数计算,常常会要求输出答案对一个数(大多是质数)取模的情况,但这衍生了一个问题:若题目中计算需用到除法而我们知道,如果 a≡b(modc)a \equiv b \pmod{c}a≡b(modc) 在大

Admin-zx 的博客 1669

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

拓展 欧几里得算法 求逆元_算法学习笔记(9):逆元

https://zhuanlan.zhihu.com/p/105467597在数论中,如果 ,我们就说 和 在模 意义下互为乘法逆元,记作 。逆元有什么用呢?我们常常遇到一些题目要求结果对一个大质数 取模,这是因为答案很大,出题人为了不麻烦大家写高精,就采取这样的方法。加减法和乘法对取模运算都是封闭的,所以你可以处处取模来避免溢出。一次取模和步步取模的结果是一样的但遇到除法时,就麻烦了:...

weixin_39549312的博客 433

算法笔记——递推求阶乘逆元(倒推)&线性求逆元

求阶乘的逆元,需要求每个阶乘的逆元,一般求最大的逆元,然后倒推剩下的全部。 void init() { fact[0] = 1;//0的阶乘 for (int i = 1; i < maxn; i++) { fact[i] = fact[i - 1] * i %mod; } inv[maxn - 1] = power(fact[maxn - 1], mod - 2);//快速幂 for (int i = maxn - 2; i >= 0; i--) { inv[i] = inv

kai_wei_的博客 1427

算法笔记之欧几里得算法&扩欧算法&乘法逆元

欧几里得算法: ①欧几里得算法(辗转相除法)简介: 欧几里得算法也称为辗转相除法,常用于求解最大公约数,一般用gcd(a,b)来表示a和b的最大公约数。若a、b均为正整数,则gcd(a,b) = gcd(b,a%b)。 ②欧几里得算法的代码实现: 递归式: int gcd(int a,int b){ if(b == 0) return a;//递归边界 else return gcd(b,a % b); } 简洁写法: int gcd(int a,int b){ return !b ?

马克菠萝包ଲ的博客 525

算法笔记·数学·快速幂求乘法逆元

摘要:本文介绍了求解模数乘法逆元的问题。给定n组整数ai和质数pi,要求计算ai模pi的乘法逆元。核心思路是利用费马小定理:当p为质数且a与p互质时,逆元为a^(p-2) mod p。通过快速幂算法实现高效计算,时间复杂度为O(log p)。若a是p的倍数则输出"impossible"。该方法适用于大数范围(1≤ai,pi≤2×10^9),每组数据可在对数时间内求解。代码演示了快速幂函数qmi的实现和主程序的输入输出处理。

xin007hoyo的博客 359

线性求逆元模板_算法学习笔记(9):逆元

https://zhuanlan.zhihu.com/p/105467597在数论中,如果 ,我们就说 和 在模 意义下互为乘法逆元,记作 。逆元有什么用呢?我们常常遇到一些题目要求结果对一个大质数 取模,这是因为答案很大,出题人为了不麻烦大家写高精,就采取这样的方法。加减法和乘法对取模运算都是封闭的,所以你可以处处取模来避免溢出。一次取模和步步取模的结果是一样的但遇到除法时,就麻烦了:...

weixin_39765697的博客 152

算法课程笔记——费马小定理&逆元

算法课程笔记——费马小定理&逆元。

2302_79123319的博客 205

拓展 欧几里得算法 求逆元_算法学习笔记(33): 拓展欧拉定理

欧拉定理是数论中一个非常重要的定理:若正整数 与 互质,则 这里的 是欧拉函数,即小于或等于 且与 互质的正整数个数。当 是质数 时,欧拉定理退化成费马小定理 。我们稍后再来证明欧拉定理。在算法竞赛中,我们常常会用到它的一个重要的推论:若正整数 与 互质,则 (这是因为 )利用这个推论,即使 比较大,我们也可以轻松地计算 的值,但需要满足 与 互质的前提。为了解决 ...

weixin_39552472的博客 275

逆元与快速幂

这位大佬的解释十分非常到位!放在这里提醒我自己的学习笔记。

m0_72696598的博客 132

数据结构与算法学习笔记----快速幂

快速幂算法的讲解和在乘法逆元上的引用

weixin_60278491的博客 1373

算法学习笔记(2):逆元的应用及其求法

算法学习笔记(2):逆元的应用及其求法

xsh_fu的博客 657
上一篇: 算法笔记--排列组合
下一篇: 算法笔记--博弈
runnerxin
博客等级 码龄10年 12粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值