扩展的欧几里德算法
/*
参考书籍:<密码编码学与网络安全>-电子工业出版社-刘玉珍等译
         <数论基础>-福建科学技术出版社-王杰官
扩展的欧几里德算法:
  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();
   
}


   
   
阅读更多
个人分类: 算法
想对作者说点什么? 我来说一句

扩展欧几里德算法c++代码

2014年08月29日 841B 下载

扩展欧几里德算法---

2008年04月15日 13KB 下载

没有更多推荐了,返回首页

不良信息举报

扩展的欧几里德算法

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭