孙子定理

问题:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何

首先要了解两个重要定理

定理1:几个数相加,如果只有一个加数,不能被数a整除,而其他加数均能被数a整除,那么它们的和,就不能被整数a整除。

定理2:二数不能整除,若被除数扩大(或缩小)了几倍,而除数不变,则其余数也同时扩大(或缩小)相同的倍数(余数必小于除数)。

运用扩展欧几里得的乘法逆元可得模板:

typedef long long ll;

ll e_gcd(ll a,ll b,ll &x,ll &y)
{
    if(b==0)
    {
        x=1;
        y=0;
        return a; 
    }
    int ans=e_gcd(b,a%b,y,x)
    y-=x*(a/b);
    return ans;
}//扩展欧几里得的模板

ll c_remainder(ll a[],ll w[],ll len)//a[]存放余数w[]存放两两互质的数
{
   ll i,d,x,y,m,n,ret;
   ret=0;
   n=1;
   for(i=0;i*=w[i];//公倍数 
     for(i=0;im=n/w[i];
      d=Extended_Euclid(w[i],m,x,y);
     ret=(ret+y*m*a[i])%n;//ret  基础之和 其中  
     /*至于为什么是 ym%w[i]=y-->m=y+w[i]x-->1=y(1/m)+x*w[i]/m; 
     s所以求出特解:y=y*m; */ 
     }
    return (n+ret%n)%n;
}

你可能感兴趣的:(算法学习)