利用扩展欧几里得算法编程求逆元
原理:
1.m是正整数,r属于Zm,且gcd(r,m)=1,存在s属于Zm,使得rs=1(mod m)。则整数s称为r模整数m的乘法逆元。
2.对任意的两个整数a和b,总存在x和y使得gcd(a,b)=ax+by成立。
3.因为由1知,r和m互素,所以gcd(r,m)=1,则可以使用扩展欧几里得算法求得x和y,则等式ax+by=1成立。
步骤:
1.输入两个数a,b;a>=b;
2.若b=0,则d=a,x=1,y=0,返回(d,x,y);
3.设x2=1,x1=0,y2=0,y1=1;
4.当b>0时,
(1)q=[a/b],r=a-qb,x=x2-qx1,y=y2-qy1;
(2)a=b,b=r,x2=x1,x1=x,x2=1,y2=y1,y1=y;
5.d=a,x=x2,y=y2,返回(d,x,y);
则x为所求。
代码实现如下:
#include<stdio.h>
int main()
{
int d, x1, x2, y1, y2,q,r,x,y,a1,b1,a,b;
printf("请输入a和模m:");
scanf("%d,%d", &a, &b);
a1 = a, b1 = b;
if (a1 < b1)
{a1 = b1 + a1;b1 = a1 - b1; a1 = a1 - b1;}
if (b1 == 0) {d = a1, x = 1, y =0;printf("存在某个输入为0");return;
}
x2 = 1, x1 = 0, y2 = 0, y1 = 1;
while (b1 > 0) {q = a1 / b1;r = a1 - q*b1;//余数x = x2 - q * x1;y = y2 - q * y1;a1 = b1;b1 = r;x2 = x1;x1 = x;y2 = y1;y1 = y;}
d = a1, x = x2, y = y2;
printf("\n%d在mod%d下的逆元为%d\n",a,b,y);
system("pause");
return ;
}
利用扩展欧几里得算法编程求逆元相关推荐
- 扩展欧几里得算法(求逆元)
扩展欧几里得算法(求逆元)总结 1.在RSA算法生成私钥的过程中涉及到了扩展欧几里得算法(简称exgcd),用来求解模的逆元. 2.首先引入逆元的概念: 逆元是模运算中的一个概念,我们通常说 A 是 ...
- 扩展欧几里得算法、乘法逆元与中国剩余定理
文章目录 前言 定义.定理和部分证明 整除 定义 定理 定理的证明 同余 定义 同余的性质 同余的运算律 运算律的证明 扩展欧几里得算法 代码模板 算法详解 乘法逆元 求解逆元 乘法逆元的作用 中国剩 ...
- 如何利用扩展欧几里得算法求解不定方程_客户端不用的算法系列:从头条笔试题认识扩展欧几里得算法...
难度较高,阅读时间大概 28 分钟 这是数论的第二篇,在<素数筛法>中,我们重温了素数这个数学定义,并且给出了区别于教科书上更高效的 Eratosthenes 筛法和欧拉线性筛.这篇文会从 ...
- 如何利用扩展欧几里得算法求解不定方程_欧几里德算法、拓展欧几里德、中国剩余定理...
01.欧几里德算法(Euclidean algorithm)(辗转相除法) 欧几里德算法又称辗转相除法,主要是用于计算两个整数a,b的最大公约数. 简单点说一下算法原理:两个整数的最大公约数等于其中小 ...
- 扩展欧几里得算法求逆元---乘法密码
欧几里得算法 背景知识: 欧几里得算法:又叫做辗转相除法,用来求两个数的最大公约数.通过辗转相除,当余数为0的时候,最后的除数就是两个数的最大公约数. 例如:求20和11的最大公约数 每次将除数作为下 ...
- [BZOJ1477] 青蛙的约会|扩展欧几里得算法
1477: 青蛙的约会 Time Limit: 2 Sec Memory Limit: 64 MB Submit: 306 Solved: 192 [Submit][Status][Discuss ...
- 数学知识——扩展欧几里得算法
一. 算法描述 欧几里得算法 我们先回忆一下欧几里得算法(辗转相除法): 这个很好证明: 首先,,. 1.现假设,那么,取,这样,所以a和b的约数是b和a mod b的约数. 2.现假设,那么,取,这 ...
- GCD LCM 欧几里得算法 扩展欧几里得算法
欧几里得算法: 辗转相除法的关键恒等式:gcd(a,b)=gcd(b,a mod b); 边界条件:gcd(a,0)=a; //最大公约数 int gcd(int a,int b) {return b ...
- 表格法轻松理解扩展欧几里得算法以及利用其求乘法逆元
文章目录 扩展欧几里得算法 求乘法逆元 扩展欧几里得算法 具体算法的原理参见扩展欧几里得算法求乘法逆元,本文仅以表格的形式展现计算过程,浅显易懂.下面通过例子进行说明. 例:求1234和4321的最大 ...
最新文章
- undefined symbol: sqlite3_open_v2
- 防止多重启动之调用Api [收集2005090201]
- python 打包exe_将python文件打包exe独立运行程序方法详解
- Python 之匿名函数和偏函数
- 【数学建模】基于matlab GUI干线交通控制方法【含Matlab源码 1259期】
- 存在感应雷达模块,LED灯感应控制,微波雷达技术应用
- 手机、电脑录制内部声音的方法
- aso优化时高权重的积分墙关键词_怎样做好积分墙关键词的优化
- 计算机图形点阵表示实例,计算机图形学的应用实例(计算机图形作业)精选.doc
- 视频会议服务器维护,视频会议系统一般故障与应对措施
- 雷军做程序员时写的博客,真心强啊。。
- mysql购买服务_云数据库MySQL购买须知
- 联发科发布MT7986方案支持Wi-Fi 6/6E
- LibreCAD_3编译遇到的问题
- 关于html中文显示乱码
- Android音频学习之MediaExtractor,提取音频视频轨道数据(从视频中分离音频视频数据)
- C++创建windows窗口
- 修改材质球面板shader属性数值
- Android学习记录(7)—Intent中显示意图和隐式意图的用法
- 从零开始学习HarmonyOS应用开发——1
热门文章
- Nginx笔记-Nginx中进程结构及使用Linux信号量管理
- Python笔记-使用sqlalchemy根据类创建数据库表
- Linux学习笔记-Makefile的基本使用
- C++带参数控制台(实例)
- Java高级语法笔记-文本文件的按行读取
- Qt creator5.7 OpenCV249之pyrUp函数(含源码下载)
- 清华附2021高考成绩查询,2021年高考多少分能上清华大学?附清华大学录取分数线2020全国汇总...
- linux lftp上传文件,linux中使用lftp上传下载文件
- hexo部署成功但是没效果_使用 Hexo+GitHub 搭建个人免费博客教程(小白向)
- android百度地图例子,使用百度地图API进行Android地图应用开发(Eclipse)(示例代码)...