求贝祖公式的解

package demo2;

public class P96 {
//对任意整数a、b和它们的gcd
//当且仅当m为gcd的整数倍时,ax+by=m(贝祖公式)有整数解
//要求给出其中一组解
//原理:不妨先算ax+by=gcd,用辗转相除法求a、b的gcd,
//则化到最后a2=gcd,b2=0,相应的,x2=1,y2不妨取0
//根据辗转相除法公式,有逆推上一步x、y的公式
//上一层x1=y2 , y1=x2-(a/b * y2)
	static long x;
	static long y;
	public static void main(String[] args) {
		linearEquation(2, 7, 1);
		System.out.println(x+" , "+y);
	}

	static long gcdForXy(long a,long b) {
	//全局变量改x,y,返回gcd
		if(b==0) {
			x=1;
			y=0;
			return a;
		}
		long gcd=gcdForXy(b, a%b);
		long x2=x;
		x=y;
		y=x2-a/b*y;
		return gcd;
	}
	
	static void linearEquation(long a,long b,long m) {
		long gcd=gcdForXy(a, b);
		long k=m/gcd;
		x=x*k;
		y=y*k;
	}
	
}
posted @ 2022-05-05 17:46  fighterk  阅读(81)  评论(0)    收藏  举报