扩展欧几里得
(A/B)%C = (A*B^-1)%C = (A%C)*(B^-1)%C
用扩展欧几里得求出B的逆元B^-1
//x是a mod b的乘法逆元,y是b mod a的乘法逆元
inline int extend_gcd( int a, int b, int &x, int &y ) {
int tp, r;
if( b == 0 ) {
x = 1;
y = 0;
return a;
}
r = extend_gcd( b, a%b, x, y );
tp = x;
x = y;
y = tp - a / b * y;
return r;
}
AC代码:
#include <iostream>
using namespace std;
int mod = 9973;
//求x是a mod b的乘法逆元,y是b mod a的乘法逆元
inline int extend_gcd( int a, int b, int &x, int &y ) {
int tp, r;
if( b == 0 ) {
x = 1;
y = 0;
return a;
}
r = extend_gcd( b, a%b, x, y );
tp = x;
x = y;
y = tp - a / b * y;
return r;
}
int main() {
// freopen( "c:/aaa.txt", "r", stdin );
int T, n, b, x, y;
scanf( "%d", &T );
while( T-- ) {
scanf( "%d %d", &n, &b );
extend_gcd( b, mod, x, y );
x = ( (x*n%mod) + mod) % mod;
printf( "%d\n", x );
}
return 0;
}
.
浙公网安备 33010602011771号