扩展的欧几里德算法

原创 2006年06月11日 00:21:00
/*
参考书籍:<密码编码学与网络安全>-电子工业出版社-刘玉珍等译
         <数论基础>-福建科学技术出版社-王杰官
扩展的欧几里德算法:
  gcd(m,B_)=1 => B_是GF(m)中的一个元素,并且在GF(m)中存在B_的乘法逆元.
  m.B1+B_.B2=B3

  m.B1+b.B2=1时
  b.B2=1-m.B1 =>B_.B2=1 mod m =>B2为B_的模m乘法逆元

例于:
  Q   A1    A2   A3   B1    B2  B3
  -   1     0   1759   0    1   550
  3   0     1    550   1    -3   109
  21  -5    16    5    106  -339  4
  1   106   -339  4   -111   355  1

 在本程序中,A1,B1不必用到

 正好查到一个数学上做出解释的链接:
 http://B_log.vckB_ase.com/arong/archive/2004/06/10/429.aspx
 */

#define P printf

#include<stdio.h>
#include<math.h>

void main()
{
    int m,b;
    int A_2,A_3,B_2,B_3,Q;
    int temp;
    scanf("%d",&m);
    scanf("%d",&b);
 
    A_2=0,A_3=m,B_2=1,B_3=b;
    while(B_3!=0&&B_3!=1)
    {
        Q=A_3/B_3;
   
        temp=B_3;
      
        B_3=A_3-Q*B_3;
   
        A_3=temp;
 
        temp=B_2;
      
        B_2=A_2-B_2*Q;
  
        A_2=temp;
     
 
    }


    if(B_3==0)
        printf("no multiplicative inverse/n");
    if(B_3==1)
    {
        B_2=(B_2+(abs(B_2/m)+1)*m)%m;  /*转换为Zm内的数*/
        printf("the multiplicative inverse of %d mod %d is %d/n",b,m,B_2);
    }
   
    getchar();
    getchar();
   
}


   
   

扩展欧几里德算法(附证明)

扩展欧几里德算法(附证明) 扩展欧几里得算法在acm-icpc中是常用算法,主要用于在已知a,b的情况下求解一组x,y,使它们满足贝祖等式: ax+by=gcd(a,b)=dax+by = gcd(a...
  • lincifer
  • lincifer
  • 2015年10月24日 23:45
  • 4287

扩展欧几里德算法 递归和非递归实现及证明

关于欧几里得算法,贝祖等式,扩展欧几里得算法,Wikipedia的解释非常非常详细了。 另外,看了好多别人优秀的总结,我认为最详尽的就是ACM之家的总结。 这里自己再总结一次…实际上就是把别人...
  • yoer77
  • yoer77
  • 2017年04月07日 16:19
  • 1425

欧几里得 & 拓展欧几里得算法 讲解 (Euclid & Extend- Euclid Algorithm)

欧几里得& 拓展欧几里得(Euclid & Extend-Euclid) 欧几里得算法(Euclid) 背景: 欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数。 ——百度百科 代码...
  • ACMore_Xiong
  • ACMore_Xiong
  • 2015年08月16日 02:10
  • 8042

扩展欧几里德算法计算乘法逆元详解

乘法逆元的定义:       A * X MOD N == 1则称X为A关于模N的乘法逆元。 注:       只有两个数互素的时候才会有乘法逆元。       两个数不互素是没有乘法逆元的。   费...
  • Wind_white
  • Wind_white
  • 2017年03月12日 13:41
  • 1270

扩展欧几里得算法及其应用

可公度线段与欧几里得(Euclid)算法 扩展欧几里得算法是欧几里得算法(又叫辗转相除法)的扩展。已知整数 a,ba,b,扩展欧几里得算法可以在求得 a,ba,b 的最大公约数(gcd(a,b)gcd...
  • lanchunhui
  • lanchunhui
  • 2016年01月27日 11:36
  • 1229

对于拓展欧几里德算法的理解

对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整 数对 x,y ,使得 gcd(a,b)=ax+by。 c++语言的实现: int exgcd(l...
  • yeweiyang16
  • yeweiyang16
  • 2015年08月02日 08:15
  • 474

Ural 1141. RSA Attack 扩展欧几里得算法

1141. RSA Attack Time limit: 1.0 second Memory limit: 64 MB The RSA problem is the following: gi...
  • jyysc2010
  • jyysc2010
  • 2013年08月03日 15:53
  • 1187

扩展欧几里得算法模板(希望永远不要搞懂了)

扩展欧几里得 上述谈到的最大公约数算法是数学家欧几里德提出的,同时,他也提出了扩展欧几里德算法来解决整数二元一次不定方程问题。 整数二元一次不定方程 形如a*x+b*y=c(...
  • fanesemyk
  • fanesemyk
  • 2016年08月05日 18:40
  • 958

关于欧几里得算法和拓展欧几里德定理的证明(不定方程求解方法)

---------------------------------欧几里得算法和拓展欧几里得定理----------------------------------------------------...
  • qq_24451605
  • qq_24451605
  • 2015年07月24日 20:06
  • 1023

扩展欧几里德算法详解以及乘法逆元

转载网址:http://blog.csdn.net/zhjchengfeng5/article/details/7786595 有些地方看不懂,但觉得写的很棒,先转载下来,以后慢慢研究…… ...
  • Stray_Lambs
  • Stray_Lambs
  • 2016年08月05日 22:26
  • 6322
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:扩展的欧几里德算法
举报原因:
原因补充:

(最多只允许输入30个字)