扩展欧几里得

/*==================================================*/ | 求ax+by=z的整数解 | CALL:void ex_gcd(x,y,a,b); | a、b为未知数。有解的前提是xy的最大公约数是z的约数。 /*==================================================*/ __int64 Z; void ex_gcd(__int64 x,__int64 y,__int64 &a,__int64 &b){ __int64 t=x%y; if(!t){ a=0;b=Z/y; }else{ ex_gcd(y,t,a,b);t=a;a=b;b=t-b*(x/y); } } /*==================================================*/ | 把a调整为不小于0的最小值 | CALL:void adjust_gcd(x,y,a,b); /*==================================================*/ int ex_gcd_A(__int64 x,__int64 y){ __int64 a,b; ex_gcd(x,y,a,b); a=(a%y+y)%y; return a; }

你可能感兴趣的:(扩展)