中国剩余定理模板

不知道说什么,就完全一个模板来着……不过里面的意蕴深厚,有待深究!
include
 using namespace std;
 __int64 m[1000];//除数
 __int64 r[1000];//余数
 __int64 X,Y;
 
__int64 f2(__int64 a, __int64 b)//扩展欧拉
 {
     if (b==0)
     {
         X=1;
         Y=0;
         return a;
     }
 
    __int64 d=f2(b,a%b);
     __int64 t=X;
     X=Y;
     Y=t-a/b*Y;
     return d;
 }
 
__int64 f1(long len)//中国剩余定理
 {
     __int64 M=1;
     int i;
     for (i=0;i<len;++i)
     {
         M*=m[i];
     }
    __int64 res=0;
    for (i=0;i<len;++i)
     {
         __int64 Mi=M/m[i];
         f2(Mi,m[i]);
         res= (res+Mi*X*r[i])%M;
     }
     if (res<0)
     {
         res+=M;
     }
     return res;
 }
 
int main()
 {
     int n;
     while (scanf("%ld",&n)!=EOF)
     {
         int i;
         for (i=0;i<n;++i)
         {
             scanf("%I64d %I64d",&m[i],&r[i]);
         }
         printf("%I64d\n",f1(n));
     }
     return 0;
 }
原文地址:https://www.cnblogs.com/cchun/p/2520184.html