剩余定理

14人阅读 评论(0) 收藏 举报
分类:

中国剩余定理

孙子算经里有这样一个问题:“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?

翻译成现在的数学问题就是 x%3 == 2x%5 == 3x%7 ==  2,的值;

遇到这这样一个问题很多C语言初学者不禁会想到用暴力可以算出来,还要这样一个定理干嘛?

如果数据相当大呢?计算机就会计算相当困难。然而这个问题早早的就被孙子解决了。

 求出3,5,7 两两中的最小公倍数lcmk*lcm与另一个数mod等于1(找出一个符合条件的k);

  用k*lcm*另一个没有在lcm中的数的等式的余数  [(有点绕)就是 lcm(3,5),另一个数就是x%7==2 的等式中的余数 就是即找出这k*lcm3,5*2]

求法(剩余定理思想)

  Lcm(3,5) = 15;   // lcm是最小公倍数 

  Lcm(3,7) = 21;

  Lcm(5,7) = 35;

  a*15%7 == 1;

  b*21%5 == 1;

  c*35%3 == 1;

  可求得a,b,c的值为1,1,2;

  我们可得15%7 == 1 , 21%5 == 1 , 70%3 == 1

  Ans = (15*2 + 21*3 + 70*2) % lcm(3,5,7);  

  Ans = 23;

再加一个例题

一个数被3除余1,被4除余2,被5除余4,这个数最小是几?

 题中345三个数两两互质。 则〔45=20;〔35=15;〔34=12;〔345=60 

为了使203除余1,用20×2=40 使154除余1,用15×3=45 使125除余1,用12×3=36 

然后,40×145×236×4=274 

因为,274>60

所以,274%60 = 34,就是所求的数。

 

粘个剩余定理题    POJ 1006 http://poj.org/problem?id=1006

题目又上角有中文意思

这道题的解法就是: 

已知(ans+d)%23=a;   (ans+d)%28=b;   (ans+d)%33=c 
       使33×28×X被23除余1,用33×28×8 = 5544; 
       使23×33×Y被28除余1,用23×33×19 = 14421; 
       使23×28×Z被33除余1,用23×28×2 = 1288。

      于是X==8, Y==19, Z==2; 
      因此有(5544×a + 14421×b + 1288×c)% lcm(23,28,33) =ans + d 

又23、28、33互质,即lcm(23,28,33) = 21252;
      所以有ans =(5544×a+14421×b+1288×c-d)% 21252

AC代码

#include<iostream>  
#include<stdio.h>  
using namespace std;  
int main()  
{  
    int a, b, c, d,cnt=1;  
    int ans;  
    while (scanf("%d%d%d%d", &a, &b, &c, &d)!=EOF&&a!=-1)  
    {  
        ans = (a * 5544 + b * 14421 + c * 1288) % 21252;  
        ans -= d;  
        if (ans<=0) ans += 21252;  
        if(ans>21252) ans=21252;  
        printf("Case %d: the next triple peak occurs in %d days.\n", cnt++, ans);  
    }  
    return 0;  
}

这个题暴力也能过

暴力AC代码

#include<iostream>  
#include<stdio.h>  
using namespace std;  
int main()  
{  
    int a, b, c, d,cnt=1,i;  
    while (scanf("%d%d%d%d", &a, &b, &c, &d)!=EOF&&a!=-1)  
    {  
        for(i=1; ; i++)  
            if((i-a)%23==0&&(i-b)%28==0&&(i-c)%33==0&&i>d)  
            {  
                break;  
            }  
            printf("Case %d: the next triple peak occurs in %d days.\n", cnt++, i-d);  
    }  
    return 0;  
}

查看评论

剩余系,剩余定理,同余定理,费马小定理的证明

费马小定理: 证明:假如p是质数,且(a,p)=1,那么 a^(p-1) ≡1(mod p) 一、准备知识: 所谓"剩余系",就是指对于某一个特定的正整数n,一个整数集中的数模n所得的余数域。如...
  • acm_1361677193
  • acm_1361677193
  • 2015年08月09日 16:25
  • 1066

算法:Python实现中国剩余定理

中国剩余定理(Chinese Remainder Theorem-CRT):又称孙子定理,是数论中的一个定理。即如果一个人知道了一个数n被多个整数相除得到的余数,当这些除数两两互质的情况下,这个人就可...
  • u010558281
  • u010558281
  • 2016年12月08日 09:12
  • 659

中国剩余定理:从构造特解到找出通解

曾以为中国剩余定理不在我所能理解的范围之内,起码,不在我能证明的范围之内——因为描述它的这堆符号的缘故。如果你也觉得这个定理的描述用到了许多高端的符号,请阅读本文。...
  • ruoruo_cheng
  • ruoruo_cheng
  • 2016年07月30日 21:34
  • 875

中国剩余定理及其证明

中国剩余定理(CRT)的表述如下   设正整数两两互素,则同余方程组                                   有整数解。并且在模下的解是唯一的,解为    ...
  • Rain722
  • Rain722
  • 2016年11月19日 16:33
  • 698

中国剩余定理及扩展欧几里得算法

中国剩余定理已知m1、m2、m3是两两互质的正整数,求最小正整数x,使它被m1、m2、m3除所得余数分别为C1、C2、C3 。 孙子定理的思想便是先分别找出被其中数mi除余1而被另二数整除的数Mi(i...
  • xhtl007
  • xhtl007
  • 2017年01月05日 14:23
  • 265

中国剩余定理与扩展

中国剩余定理一开始觉得这东西好难。。。后来发现好像也没有这么难。。。 我们来看一道题目: 树王种了一棵treap,她现在决定把这棵treap改造为一棵无旋多叉triep,于是她摘下了treap的...
  • litble
  • litble
  • 2017年07月22日 21:50
  • 664

[BZOJ 1407][NOI 2002]Savage(中国剩余定理+扩展欧几里得)

题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=1407思路由于此题里n n的范围很小,因此可以直接从小到大暴力枚举洞穴个数m m(注:此题并不...
  • qpswwww
  • qpswwww
  • 2015年04月27日 10:02
  • 1413

中国剩余定理的证明

例如这样的式子 其中m1……mn互质,我们求里面的x,就会用到中国剩余定理。 为了方便后面表示,我们把s看成x,那么: 我们先选择其中的第一个式子来看,s % m1 = a1 那么...
  • zzycsx
  • zzycsx
  • 2015年10月30日 11:27
  • 3348

中国剩余定理详解

中国剩余定理 孙子算经里有这样一个问题:“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?” 翻译成现在的数学问题就是 x%3 == 2,x%5 == 3,x%7 ==  2,...
  • jk13171217
  • jk13171217
  • 2014年07月29日 14:17
  • 2695

初等数论四大定理(威尔逊定理,欧拉定理,中国剩余定理,费马小定理)

1、威尔逊定理:在初等数论中,威尔逊定理给出了判定一个自然数是否为素数的充分必要条件。即:当且仅当p为素数时:( p -1 )! ≡ p-1 ( mod p ),但是由于阶乘是呈爆炸增长的,其结论对于...
  • mengxingyuanlove
  • mengxingyuanlove
  • 2015年09月23日 17:40
  • 802
    个人资料
    持之以恒
    等级:
    访问量: 9656
    积分: 1487
    排名: 3万+
    最新评论