http://acm.hdu.edu.cn/showproblem.php?pid=1576
写了个ex_gcd的模板...太蠢导致推了很久的公式
这里推导一下:
因为 1 = BX + 9973Y ----------------①
且 n = Bk - floor(A/9973) * 9973 ----------------②
①*n即 n = BnX + nY * 9973
那么 k = nX
k = A/B ...而k%9973为所求
(n*X)%9973 = (n%9973 * X%9973)%9973 = (n%9973 * (X%9973+9973)) % 9973
那么EX_GCD求逆元得到X,因为X%9973可能为负数,所以转换成正数取模
pairex_gcd(LL a,LL b){ if(b == 0) return make_pair(1,0); pair t = ex_gcd(b,a%b); return make_pair(t.second , t.first - (a / b) * t.second); } int main() { int T,n,k; cin>>T; while(T--){ cin>>n>>k; pair p = ex_gcd(k,9973); LL q = p.first % 9973 + 9973; LL ans = (q * n) % 9973; cout< endl; } return 0; }