zoukankan      html  css  js  c++  java
  • 扩展Stein算法计算乘法逆元(C语言版)

    扩展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 = 1;
    	int y = 0;
    	int x1 = 0;
    	int y1 = 1;
    
    	if (b == 0) {
    		return -1;
    	}
    
    	while (1) {
    		if (a % 2 == 0) {
    			if (y % 2 == 0) {
    
    			}
    			else {
    				if (y < 0) {
    					x -= B;
    					y += A;
    				}
    				else {
    					x += B;
    					y -= A;
    				}
    			}
    
    			a /= 2;
    			x /= 2;
    			y /= 2;
    		}
    		else {
    			if (a == 1) {
    				return (y + A) % A;
    			}
    			else {
    				if (a - b > 0) {
    
    				}
    				else {
    					swap(&a, &b);
    					swap(&x, &x1);
    					swap(&y, &y1);
    				}
    
    				a -= b;
    				x -= x1;
    				y -= y1;
    			}
    		}
    	}
    
    	return -1;
    }
    

     

  • 相关阅读:
    hello world!
    react(一):组件的生命周期
    position和BFC
    继承
    绕不开的this
    js世界这么大,闭包想看看
    js中数组常用方法总结
    Appium混合应用测试
    手机APP兼容性测试
    运行monitor提示需要安装旧JAVA SE 6运行环境
  • 原文地址:https://www.cnblogs.com/cg-bestwishes/p/11925799.html
Copyright © 2011-2022 走看看