模逆运算(C语言)
简介
使用扩展欧几里得算法
代码实现
#include <stdio.h>
int main()
{
int temp,q,t1,t2,t3,i=1;
int a,b,swap=0;
int x1,x2,x3,y1,y2,y3;
/**欢迎**/
printf("--------欢迎使用模逆运算-----------\n");
printf("请输入两个整数,以空格分开\n");
scanf("%d",&a);
scanf("%d",&b);
if(a<b){ //交换a,b
swap = 1;
temp = a;
a = b;
b = temp;
}
x1=1;x2=0,x3=a;
y1=0;y2=1,y3=b;
while(y3 != 0){
q = x3/y3;
t1=x1-q*y1;t2=x2-q*y2;t3=x3-q*y3;
x1=y1;x2=y2;x3=y3;
y1=t1;y2=t2;y3=t3;
printf("第%d次迭代,t1=%d,t2=%d,t3=%d\n",i,t1,t2,t3); //打印迭代的值
i++;
}
if(x3 == 1){
if(swap == 1){
printf("模逆运算:%d mod %d 为:%d\n",b,a,x2);
printf("模逆运算:%d mod %d 为:%d\n",a,b,x1);
} else{
printf("模逆运算:%d mod %d 为:%d\n",a,b,x2);
printf("模逆运算:%d mod %d 为:%d\n",b,a,x1);
}
} else{
printf("无法进行模逆运算!");
}
return 0;
}