您的位置:首页 > 其它

中国剩余定理

2015-11-09 19:59 176 查看
#include <iostream>
using namespace std;
#define maxn 1000
int n,x[maxn][2],m[maxn],y[maxn];//x[i][0]=xmodx[i][1];
int moniyuan(int a,int b)
{
if(a<b){
int temp=b;
b=a;
a=temp;
}
int xx1=a,xx3=1,xx4=0;
int x1=b,x2=a/b,x3=0,x4=1;
while(x1!=1)
{//cout<<x1<<" "<<x2<<" "<<x3<<" "<<x4<<endl;
int tx3=x3;
int tx4=x4;
int tx1=x1;
x3=xx3-x2*x3;
x4=xx4-x2*x4;
x1=xx1%x1;
xx1=tx1;
x2=xx1/x1;
xx3=tx3;
xx4=tx4;
}
int re=x4;
// int re=xx4-x2*x4;
return re>0?re:re+a;
}
int main()
{
int n;
while(cin>>n)
{
int sum=0;
long long p=1;
for(int i=0;i<n;i++)
{
cin>>x[i][0]>>x[i][1];
p=p*x[i][1];
}
for(int i=0;i<n;i++)
{m[i]=p/x[i][1];
y[i]=moniyuan(x[i][1],m[i]%x[i][1]);
cout<<y[i]<<" ";
sum+=x[i][0]*m[i]*y[i];
}
cout<<endl;
cout<<sum%p<<endl;

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: