求贝祖公式的解

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 @   fighterk  阅读(71)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示