扩展的欧几里德算法

原创 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();
   
}


   
   
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

扩展欧几里德算法的理解

  • 2012-09-07 21:33
  • 133KB
  • 下载

扩展欧几里德算法与数论倒数

欧几里德算法是一个很古老但很有效的计算最大公约数的算法。这个算法很简单,用C++代码来表示就是: int gcd(int a, int b){ while(b != 0) { ...

扩展欧几里德算法的理解

  • 2011-03-02 10:01
  • 133KB
  • 下载

扩展欧几里德算法详解

扩展欧几里德算法     谁是欧几里德?自己百度去     先介绍什么叫做欧几里德算法     有两个数 a b,现在,我们要求 a b 的最大公约数,怎么求?枚举他们的因子?不现实,当 a b...

扩展欧几里德算法 线性同余方程 中国剩余定理

哎呀,经过这两三天的奋斗,终于搞懂了一类问题——用扩展欧几里德算法求解线性同余方程。其实这类问题应该是比较基础也比较简单的,但我由于几乎没有一点数论的基础,所以还是难为了我不久,等现在彻底搞明白以后再...

扩展的欧几里德算法-HDU2669

思路: 本来想写一写思路的,但是,看看百度百科和维基文科的讲解,已经很明白了。这里只摘取一部分核心内容,  参考文献如下:   http://baike.baidu.com/view/14782...

扩展欧几里德算法详解

转自:http://blog.csdn.net/zhjchengfeng5/article/details/7786595
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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