中国剩余定理
对于
我们求一组通解
易知通解为
其中
容易看出来这样构造出的解周期为,只要在最后的解中即可
Code
#include<cstdio>
#include<iostream>
using namespace std;
struct poi
{
int mod,res,m,nm;
}a[10005];
int n;
void exgcd(int a,int b,int &x,int &y)
{
if(b==0)
{
x=1;
y=0;
return ;
}
exgcd(b,a%b,y,x);
y-=a/b*x;
return ;
}
int main()
{
cin>>n;
int kkk=1;
for(int i=1;i<=n;i++)
{
cin>>a[i].mod>>a[i].res;
kkk*=a[i].mod;
}
for(int i=1;i<=n;i++)
{
a[i].m=kkk/a[i].mod;
//cout<<a[i].m<<endl;
}
int total=0;
for(int i=1;i<=n;i++)
{
int x,y;
exgcd(a[i].m,a[i].mod,x,y);
//cout<<x<<endl;
a[i].nm=(x%a[i].mod+a[i].mod)%a[i].mod;
//cout<<a[i].nm<<endl;
total+=a[i].m*a[i].nm*a[i].res;
}
total%=kkk;
cout<<total;
}
浙公网安备 33010602011771号