逆元java_逆元 - 阿聊 - 博客园

每个数a均有唯一的与之对应的乘法逆元x,使得ax≡1(mod n) , 一个数有逆元的充分必要条件是gcd(a,n)=1,此时逆元唯一存在 。

逆元的含义:模n意义下,1个数a如果有逆元x,那么除以a相当于乘以x。

逆元的定义:定义:正整数 a, n,如果有 ax ≡ 1(mod n),则称 x 的最小正整数解为 a 模 n的逆元。

为什么要有乘法逆元呢?

当我们要求(a/b) mod p的值,且a很大,大到会溢出;或者说b很大,达到会爆精度。无法直接求得a/b的值时,我们就要用到乘法逆元。

求证:设k为b关于p的乘法逆元,证明(a/b)%m=(a*k)%m?

我们可以通过求b关于p的乘法逆元k,将a乘上k再模p,即(a*k) mod p。其结果与(a/b) mod p等价。

证:

根据b*k≡1 (mod p)有b*k=p*x+1。

k=(p*x+1)/b。

把k代入(a*k) mod p,得:

(a*(p*x+1)/b) mod p

=((a*p*x)/b+a/b) mod p

=[((a*p*x)/b) mod p +(a/b)] mod p

=[(p*(a*x)/b) mod p +(a/b)] mod p

//p*[(a*x)/b] mod p=0

所以原式等于:(a/b) mod p

更简单的证明:

a/b mod p =  a* (b*b^(-1) ) /b =a*b^(-1);

一、循环找解法

给定模m和需要求逆的数x,直接暴力枚举1~m-1

检查是否有x*i=1(mod m)

这种算法可以应用与写暴力、对拍、模数较小,求逆次数少的情况

时间复杂度O(m)

#include

#include

using namespace std;

int main()

{

int n,m;

cin>>n>>m;

for(int i=1;i

if(i*n%m==1) {

printf("%d\n",i);

break;

}

}

return 0;

}

二、扩展欧几里得算法

给定模数m,求a的逆元相当于求解ax=1(mod m)

这个方程可以转化为ax-my=1

然后套用求二元一次方程的方法,用扩展欧几里得算法求得一组x0,y0和gcd

检查gcd是否为1

gcd不为1则说明逆元不存在

若为1,则调整x0到0~m-1的范围中即可

( 用我自己的话解释一下,①:extgcd 目的 求 x ,y ; ②:逆元 目的 求 x;  ③: so 用extgcd 来求逆元 )

一个数有逆元的充分必要条件是gcd(a,n)=1,如果gcd(a,n)>1,则不存在逆元:比如:18 12

#include

#include

using namespace std;

int exgcd(int a,int b,int &x,int &y)

{

if(b==0) {

x=1,y=0;

return a;

}

int r = exgcd(b,a%b,x,y);

int t = x;

x = y;

y = t - a/b*y;

return r;

}

int inv(int n,int m)

{

int x,y;

int ans = exgcd(n,m,x,y);

if(ans == 1)

return (x%m+m)%m;

//定义:正整数 a, n,如果有 ax ≡ 1(mod n),则称 x 的最小整数解为 a 模 n的逆元。

else

return -1;

}

int main()

{

int n,m;

cin>>n>>m;

int ans = inv(n,m);

ans == -1 ? cout<

return 0;

}

/*

intput:

5 7

22 29

100 97

18 12

output:

3

4

65

没有逆元

*/

三、费马小定理及欧拉定理

四、O(n)求1~n逆元表

(这个写的不是很详细,具体看那个链接)

ps:

a与b对模m同余,记为a≡b(mod m)

ax≡1(mod p) 读作:a关于模p的乘法逆元。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QuickBI助你成为分析师——群空间自主开通嵌入第三方报表权限

摘要&#xff1a; 用户使用过程中经常需要将创建的仪表板嵌入至自己应用中&#xff0c;方便查看。目前目前高级版群空间下支持用户自助化开通报表权限&#xff0c;通过获取拼接Token方式后台验证更加严格&#xff0c;并且支持实时更新/关闭Token以保证数据安全。用户使用过程中…

如何查看一个组件的 classid是多少_万一免五(万1免5)是骗人的吗?如何查看自己的交易费率是多少?万一免五最新问题汇总!...

前言每天都会遇到很多问题&#xff0c;大多数问题是重复的&#xff0c;所以整理到公众号里&#xff0c;希望你们看一下&#xff0c;别再一遍遍问了....万一免五开户是真的吗&#xff1f;随着监管越来越严&#xff0c;可以给万一免五的券商也越来越少&#xff0c;只要赶在万一免…

阿里云直播转点播最佳实践

摘要&#xff1a; 在前不久刚刚落幕的深圳云栖大会现场&#xff0c;有一个直播间体验项目引起了现场参会嘉宾的关注。云栖直播间是以视频云技术为基础&#xff0c;为云计算从业者量身打造了一个科技直播间&#xff0c;让每位嘉宾都可以过一把当“网红主播”的瘾。前言在前不久刚…

假如从餐饮店的角度来看架构…

戳蓝字“CSDN云计算”关注我们哦&#xff01;麦当劳作为世界快餐业的巨头之一&#xff0c;可以说是风靡全球圈粉无数。小编个人也是麦当劳的忠实粉丝之一。今天的文章主要就是从餐饮店的角度来讲讲的互联网技术架构发展故事。为了方便故事的讲解&#xff0c;我们假定创始人名称…

Maven依赖方式引用UEditor的jar包

使用UEditor时候&#xff0c;如果不引入相关jar包&#xff0c;controller.jsp就会报找不到类的错误&#xff0c;一些功能也无法实现。但是maven中央仓库没有这两个相关的jar包&#xff0c;用直接导入的方式又显得莫名其妙&#xff0c;那么怎么通过maven方式依赖呢&#xff1f; …

编译期java_java编译期和运行期

举个例子&#xff0c;当我们作为开发人员&#xff0c;在电脑上拼死拼活写了一个版本的代码&#xff0c;然后将代码提交到git上去&#xff0c;当我们用jekins或其他工具将代码从git上clone下来&#xff0c;使用mvn package&#xff0c;或者mvn intall打包的过程就叫编译期。是指…

【新功能】媒体处理MPS全新支持自适应多码率、多语言音轨

摘要&#xff1a; 视频内容的分发与播放已经深入了各行业的各类业务场景之中&#xff0c;对于视频平台而言&#xff0c;在不同网络状况下&#xff0c;都能以最优质的状况播放视频&#xff0c;满足用户对于观看体验的更高追求是一个不变的目标。为了更好的满足视频云客户的需求&…

下载ueditor-1.1.3.jar源码和源代码

http://www.bvbcode.com/app/downloadfile1?type2&down_key684b999e03e30a3e29cf1ada84d62b55&fileid1674791&softkeysul6vt9o&t1578129576

python 查看变量_剖析python运算符is和==的区别

is和这两个运算符一直是困扰python的初学者&#xff0c;它们都可以用来判断某个对象是否是某个值&#xff0c;那么到底什么时候用is&#xff0c;什么时候用去判断某个对象是否是某个值哪&#xff1f;下面勇哥结合实例给大家分享下两者的区别和使用建议。一、引入首先python是一…

Docker是啥?容器变革的火花?

戳蓝字“CSDN云计算”关注我们哦&#xff01;编译作者&#xff1a;风车云马&#xff08;微信号&#xff1a;zhangyisq&#xff09;文︱Serdar Yegulalp本篇文章转自InfoWorld网站在畅聊Docker之前&#xff0c;我们先讲讲什么是容器&#xff1f; …

vba mysql连接字符串_分享一个VBA连接mysql数据库的方法

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼Dim strcn As StringDim cn As New ADODB.Connection构造函数Private Sub Class_Initialize()strcn "drivermysql odbc 3.51 driver;" & _"server192.168.101.89;" & _"databasemmtest;" &…

DRDS到MaxCompute(原ODPS)数据归档性能优化测试

摘要&#xff1a; cdp同步基本原理 数据集成&#xff08;Data Integration&#xff09;是阿里巴巴集团提供的数据同步平台。该平台具备可跨异构数据存储系统、可靠、安全、低成本、可弹性扩展等特点&#xff0c;可为 20 多种数据源提供不同网络环境下的离线&#xff08;全量/增…

Vue 项目预热

软件版本Vue.js2.5.2vue-router3.0.1Node.jsv8.15.0NPM6.4.1文章目录一、 Vue项目预热 - 环境配置1. node.js环境配置1-1. node.js下载1-2. node.js安装1-3. node.js安装完成后验证3-2. 创建一个基于 webpack 模板的项目3-3. 以npm形式运行travel项目 dev环境一、 Vue项目预热 …

activiti动态办理人_安全生产许可证办理相关问题

安全生产许可证办理相关问题众所周知&#xff0c;安全生产许可证是建筑企业的重要证件&#xff0c;也是企业开展工程的保障&#xff0c;取得建筑资质证书后必须申请安许证。在建筑企业动态核查中&#xff0c;安许证及其相关安全生产条件是核查的重点&#xff0c;虽然安全许可证…

超干货|使用Keras和CNN构建分类器(内含代码和讲解)

摘要&#xff1a; 为了让文章不那么枯燥&#xff0c;我构建了一个精灵图鉴数据集&#xff08;Pokedex&#xff09;这都是一些受欢迎的精灵图。我们在已经准备好的图像数据集上&#xff0c;使用Keras库训练一个卷积神经网络&#xff08;CNN&#xff09;。为了让文章不那么枯燥&a…

网易云音乐热评的规律,44万条数据告诉你

戳蓝字“CSDN云计算”关注我们哦&#xff01;网易云的每日推荐里藏着你听过的歌&#xff0c;你听过的歌里藏着你的故事。网易云音乐的评论里&#xff0c;藏着许多人的故事。我们爬取了网易云音乐歌单中48400首歌的444054条热评&#xff0c;来看看网易云的热门评论里&#xff0c…

java servlet spring_spring与tomcat 对应关系,servlet各版本写法

构建项目时&#xff0c;需要springjdktomcat各版本对应关系&#xff0c;找了半天&#xff0c;一点都不高效&#xff0c;特此总结下&#xff0c;方便查阅。tomcatjdkservlet对应关系官网文档地址&#xff1a;http://tomcat.apache.org/whichversion.html当前时间版本关系。sprin…

数据科学指南

摘要&#xff1a; 本文为学习数据科学的指南&#xff0c;从编程语言、数据库管理、数据收集和整理方法、特征工程、机器学习模型、模型评估方面进行讲述。数据科学是一个相当庞大且具有多样化的领域&#xff0c;侧重于数学、计算机科学和领域专业知识。但是在本文中大部分内容将…

乐高ev3搭建图_乐高EV3机械爪合集

点击上方蓝字关注我&#xff01;乐高EV3机械爪合集哈喽小伙伴们&#xff01;新的一周我们又见面啦。这周给大家带来的是EV3的机械爪合集&#xff0c;5种不同结构类型的机械爪来自五十川老师的作品&#xff0c;可以应用于各种比赛或者任务场景中&#xff0c;下面我们先来看一下这…