(ACM数论)中国剩余定理(孙子定理)

原创 2016年08月29日 20:41:42

中国剩余定理是一种能求解一次同余方程组的姿势~

首先我们来看看什么是一次同余方程组:

X % a[1] = b[1]

X % a[2] = b[2]

….

X % a[n] = b[n]

这里的 % 是取余数的意思,使用这个姿势的前提是a[1]、a[2]、a[3]、… 、a[n]两两互质。

令 X = X[1] + X[2] + … + X[n],此时只要找到一组 X[i] 满足 X[i] % a[i] = b[i] 且 X[i] % a[1…n(除了i)]= 0 成立即可。

要使 X[i] % a[1…n(除了i)]= 0 成立,只需要让 X[i] 等于他们乘积的倍数即可。令M为他们乘积,于是有 X[i] = k * M(其中k为任意整数)。

将 X[i] = k * M 代入 X[i] % a[i] = b[i] 得到 (k * M) % a[i] = b[i]

即 k * M + o * a[i] = b[i] (其中o为任意整数)

两边同时除以 b[i] 可得到 k’ * M + o’ * a[i] = 1

即 k’ * M % a[i] = 1

此时 k’ 为 M 对 a[i](质数)的 乘法逆元 (关于乘法逆元可以参考我的这篇文章:http://blog.csdn.net/kasumimasami/article/details/52354715

所以对式子 k’ * M + o’ * a[i] = 1 两边同时乘以 b[i] 可得到

k’ * b[i] * M + o’ * b[i] * a[i] = b[i] 即 k’ * b[i] * M % a[i] = b[i]

所以 X[i] = k’ * b[i] * M

所以 X = ni[1] * b[1] * M[1] + ni[2] * b[2] * M[2] + … + ni[n] * b[n] * M[n],其中 ni[i] 为 M[i] 对 a[i](质数)的 乘法逆元

代码如下:

int fastpow(int a,int b,int mod)// a ^ b % mod
{
    int r = 1;
    while(b)
    {
        if(b&1)
            r = r * a % mod;
        a = a * a % mod;
        b = b >> 1;
    }
    return r;
}

int CRT(int a[], int b[], int len)//数组a,b如上定义,len为方程的个数
{
    int m = 1 , X = 0;
    for(int i = 1; i <= len; i++)
    {
        m = m * a[i];
    }
    for(int i = 1; i <= len; i++)
    {
        int M = m / a[i];//除了a[i]的乘积M[i]
        int ni = fastpow(M,(a[i]-2),a[i]);//求M[i]关于a[i]的乘法逆元ni[i]
        X = X + ni * M * b[i];
    }
    //返回满足的最小正整数
    while(X < 0)
        X = X + m;
    return X % m;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

ACM-韩信点兵【中国剩余定理-孙子定理】

题目34---韩信点兵 时间限制:3000 ms  |  内存限制:65535 KB 难度:1 描述 相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变...
  • qq_24423189
  • qq_24423189
  • 2016年05月02日 21:02
  • 428

中国剩余定理即孙子定理的五种解法

加深一下理解,找了点纯数学的资料(老者善学,尤老骥伏枥,况乎我也): “中国剩余定理”是公元5-6世纪、我国南北朝时期的一部著名算术著作《孙子算经》中的一个“物不知数”的解法问题:今有物不知其数,三三...
  • bobodem
  • bobodem
  • 2015年10月26日 17:08
  • 1698

中国剩余定理 /孙子定理

1.若gcd(m,M)=1,则存在整数t,使得 t*M≡1(mod m)    存在t使得 t*M=1(mod m) 等价于 X*M+m*Y=1 有解   这个在  我写的 拓展欧几里德  里面已经详...
  • yskyskyer123
  • yskyskyer123
  • 2015年10月10日 23:52
  • 421

ACM_模板_中国剩余定理(互质与非互质)

中国剩余(余数)定理,又称孙子定理,是我们老祖宗智慧的结晶,而在我们ACM界,又是一种黑箱算法,每次需要时只需要套模板即可搞定。 此算法编写上的精华在于每次通过扩展欧几里得算法求得每一个的相应解,最后...
  • RaAlGhul
  • RaAlGhul
  • 2016年03月04日 21:42
  • 868

中国剩余定理(孙子定理)的证明和c++求解

《孙子算经》里面的"物不知数"说的是这样的一个题目:一堆东西不知道具体数目,3个一数剩2个,5个一数剩3个,7个一数剩2个,问一共有多少个。 书里面给了计算过程及答案:70*2 + 21*3 + 1...
  • hard_man
  • hard_man
  • 2012年07月10日 16:16
  • 8302

中国剩余定理【数论】

中国剩余定理
  • u010468553
  • u010468553
  • 2014年08月02日 12:55
  • 1659

同余方程组,中国剩余定理,孙子定理(学习)

同余方程组,中国剩余定理(孙子定理)学习从孙子定理介绍起把,其实对于它的由来大家还是很有兴趣了解一下的。 以下是我取于互动百科的内容: 中国南北朝时期(5~6世纪)著名的著作《孙子算经》中“物不知...
  • qq_33199236
  • qq_33199236
  • 2016年05月24日 22:28
  • 1833

中国剩余定理(互质与不互质的情况)

前言:这个东西听说好久了,一直想学但是总是看到一半就放弃了,今天咬咬牙,就去研究一下吧。 中国剩余定理: 问题引入 在《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二(除以3余2)...
  • qq_29980371
  • qq_29980371
  • 2017年05月01日 12:11
  • 600

hdu 1370 中国剩余定理

首先介绍一下中国剩余定理,在寒假回来的飞机上曾经看过证明……但是看着看着就睡着了……先把方法写上,证明以后再补吧……(虽然也只会最简单的三个数的,还互素……) 中国剩余定理介绍了这样一个问题...
  • ctrss
  • ctrss
  • 2016年04月04日 23:03
  • 737

POJ 1006 中国剩余定理(孙子定理) ——数论

(大部分摘抄) 中国剩余定理:         在《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?”这...
  • xuruoxin
  • xuruoxin
  • 2012年12月03日 12:09
  • 956
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(ACM数论)中国剩余定理(孙子定理)
举报原因:
原因补充:

(最多只允许输入30个字)