依据题意:97 x - 127 y = 1 可以将其看作:ax+by=m,此刻m=1,即要求a、b互素此方程才有解。(详见欧几里德算法及其扩展)
而97、127恰巧互素,符合要求。
代码实现如下:
public class Main{
public static void main(String[] args){
try{
long ans=ExtGcd.linearEquation(97,-127,1);
long x=ExtGcd.x;
long y=EctGcd.y;
System.out.println(abs(x)+abs(y));
}catch(Ecteption e){
e.printStackTrance();
}
}
private static class ExtGcd{
static long x,y;
/**
*扩展欧几里德
*调用完成后x y是ax+by=gcd(a,b)的解
*/
public static long ext_gcd(long a,long b){
if(b==0){
x=1;
y=0;
return a;
}
long res=ext_gcd(b,a%b);
long x1=x;
x=y;
y=x1-a/b*y;
return res;
}
/**
*线性方程
*ax+by=m 当m是gcd(a,b)倍数时有解
*等价于ax=m mod b
*/
public static long linearEquation(long a,long b,long m)throws Exception{
long d=ext_gcd(a,b);
//m不是gcd(a,b)的倍数,这个方程无解
if(m%d!=0)throw new Exception("无解");
long n=m/d;
x*=n;
y*=n;
return d;
}
}
}
当然,该题在蓝桥杯竞赛题中是填空题,此题手算其实要比敲代码更快得到结果。但是,以防万一日后遇到类似不给出固定m时等无法心算的情况。还是需要掌握运用扩展欧几里德算法求解的。