博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
欧几里德算法与扩展欧几里德算法
阅读量:5975 次
发布时间:2019-06-20

本文共 1533 字,大约阅读时间需要 5 分钟。

欧几里得算法就是我们常说的辗转相除法,辗转相除法可以用来求最大公约数,知道最大公约数还可以求最小公倍数。gcd在好像也有库函数__gcd

int Gcd(int a, int b){    while(b != 0)    {      int r = b;      b = a % b;      a = r;    }    return a;}
非递归方法
int gcd(int a,int b){
return b ? gcd(b,a%b) : a;}
递归方法

扩展欧几里得算法是在解决一个什么问题呢,解方程,解二元一次方程的通解。

扩展欧几里得算法是欧几里得算法(又叫辗转相除法)的扩展。除了计算a、b两个整数的最大公约数,此算法还能找到整数x、y(其中一个很可能是负数)。通常谈到最大公因子时, 我们都会提到一个非常基本的事实: 给予二整数 a 与 b, 必存在有整数 x 与 y 使得ax + by = gcd(a,b)。有两个数a,b,对它们进行辗转相除法,可得它们的最大公约数——这是众所周知的。然后,收集辗转相除法中产生的式子,倒回去,可以得到ax+by=gcd(a,b)的整数解。by百度百科

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 exgcd(int m,int n,int &x,int &y){    int x1,y1,x0,y0;    x0=1; y0=0;    x1=0; y1=1;    x=0; y=1;    int r=m%n;    int q=(m-r)/n;    while(r)    {        x=x0-q*x1; y=y0-q*y1;        x0=x1; y0=y1;        x1=x; y1=y;        m=n; n=r; r=m%n;        q=(m-r)/n;    }    return n;}
递归方法

扩展欧几里德算法的应用主要有以下三方面:

(1)求解不定方程;

(2)求解模线性方程(线性同余方程);

(3)求解模的逆元;

模逆元的代码,当时用来加AA小姐接的QQ

#include 
__int64 la(__int64 a,__int64 b,__int64 &x,__int64 &y){ __int64 d; if(!b){ x=1;y=0;return a; } d=la(b,a%b,y,x); y-=a/b*x; return d; }__int64 Inv(__int64 a,__int64 n){ __int64 d,x,y; d=la(a,n,x,y); if(d==1) return (x%n+n)%n; else return -1;}int main(){ __int64 a,n; scanf("%I64d%I64d",&a,&n); printf("%I64d",Inv(a,n)); return 0;}

 

转载于:https://www.cnblogs.com/BobHuang/p/6848710.html

你可能感兴趣的文章
redis主从配置<转>
查看>>
bootloader功能介绍/时钟初始化设置/串口工作原理/内存工作原理/NandFlash工作原理...
查看>>
利用console控制台调试php代码
查看>>
递归算法,如何把list中父子类对象递归成树
查看>>
讲解sed用法入门帖子
查看>>
Linux 内核已支持苹果
查看>>
shell脚本逻辑判断,文件目录属性判断,if,case用法
查看>>
【二叉树系列】二叉树课程大作业
查看>>
App重新启动
查看>>
矩阵乘法
查看>>
得到目标元素距离视口的距离以及元素自身的宽度与高度(用于浮层位置的动态改变)...
查看>>
安装和配置Tomcat
查看>>
实验三
查看>>
openssh for windows
查看>>
PostgreSQL cheatSheet
查看>>
ASP.NET Core 2 学习笔记(三)中间件
查看>>
转:Mosquitto用户认证配置
查看>>
SpringBoot上传文件到本服务器 目录与jar包同级
查看>>
python开发_difflib字符串比较
查看>>
被解放的姜戈01 初试天涯
查看>>