// created time : 2022-01-10 18:28:24
// writer : fjy
#include <bits/stdc++.h>
#define _rep(i_,a_,b_) for(int i_ = a_;i_ <= b_;++i_)
#define int long long
int in(void) { int x; scanf("%lld",&x); return x; }
typedef long long ll;
using namespace std;
void exgcd(ll a,int b,int &x,int &y) {
if(!b) { x = 1; y = 0; }
else { exgcd(b,a%b,y,x); y -= (a / b) * x; }
}
int inverse(int x,int P) {
//calc ax = 1(mod P)
//ax + bP = 1
int a,b; exgcd(x,P,a,b);
a = (a % P + P) % P;
}
const int kN = 15;
int a[kN],b[kN],n = in();
signed main() {
_rep(i,1,n) b[i] = in(),a[i] = in();
ll B = 1; _rep(i,1,n) B *= b[i];
ll ans = 0;
_rep(i,1,n) {
ll Mi = B / b[i],Ti = inverse(Mi,b[i]);
ans = (ans + a[i] * Mi * Ti) % B;
}
printf("%lld\n",ans);
return 0;
}
这份代码过了。
在其他网站上提交,错错错。
是不是看不出什么问题?
在 inverse 函数中 a 是没有被返回的。
可我想让它返回 a。
可是,它居然真的返回了 a。
什么情况?这是什么 feature?