今天朋友问我,才做的~看了一下题发现是中国剩余定理,然后就做了~
有一个地方需要特殊处理,就是找Mi的时候,我设定了一个上限,尽量大一点吧~
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
long long b[11],m[11],Mi[11],M[11];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
long long mm=1;
for(int i=0;i<n;i++)
{
scanf("%lld%lld",&m[i],&b[i]);
mm*=m[i];
}
long long ans=0;
for(int i=0;i<n;i++)
{
M[i]=mm/m[i];
for(long long j=1;j<100000;j++)
if(j*M[i]%m[i]==1)
{
Mi[i]=j;
break;
}
ans+=Mi[i]*M[i]*b[i];
}
printf("%lld\n",ans%mm);
}
return 0;
}