扩展Stein算法一般用来计算两个数字的最大公约数,其算法思想如下:
用Stein算最大公约数的算法在网上有很多,就不列出了。
现给出扩展Stein算法来求乘法逆元的方法:
算法流程图如下:(求B在模A上的逆)
C语言代码如下:
//交换算法
void swap(int *a, int *b) {
*a ^= *b; //a=a^b
*b ^= *a; //b=b^(a^b)=b^a^b=b^b^a=0^a=a
*a ^= *b; //a=(a^b)^a=a^b^a=a^a^b=0^b=b
}
//计算的是B在模A上的逆 B^(-1)modA
int mod_reverse_Stein(int b, int a)
{
int A = a;
int B = b;
int x =