中国剩余定理

来源:互联网 发布:php模拟get提交数据 编辑:程序博客网 时间:2024/06/05 05:42
#include <iostream>using namespace std;#define maxn 1000int 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;}

0 0
原创粉丝点击