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