首页 > 代码库 > 【poj 1006】Biorhythms(数论--中国剩余定理 模版题){附【转】中国剩余定理 }

【poj 1006】Biorhythms(数论--中国剩余定理 模版题){附【转】中国剩余定理 }

题意:

解法:中国剩余定理。定义为有 k 对关系:P % ai = bi,其中 ai 两两之间互质。(而两两之间不互质就是把原来的关系式化为:P = bi (mod ai) →  ai * x + bi = P,用拓展欧几里德求解同余方程组了。)
    而 ai 两两互质时,
可知道 a2*a3*...*ak = 1 (mod a1)  和  a1*a3*...*ak = 1 (mod a2) 等关系。那么想使 P % ai = bi
,就是要式子两边同乘 bi 了。

 


下面是转载的了~ 原博:http://blog.csdn.net/shanshanpt/article/details/8724769

《孙子算经》中有“物不知数”问题:“今有物不知其数,三三数之余二 ,五五数之余三 ,七七数之余二,问物几何?”答为“23”。

 --------这个就是传说中的“中国剩余定理”。 其实题目的意思就是,n % 3 = 2, n % 5 = 3, n % 7 = 2; 问n是多少?

那么他是怎么解决的呢?

看下面:

题目中涉及 3, 5,7三个互质的数、

令:5 * 7 * a % 3 = 1;  --------------> a = 2; 即5 * 7 * 2 = 70;

       3 * 7 * b % 5 = 1;  --------------> b = 1; 即3 * 7 * 1 = 21;

       3 * 5 * c % 7 = 1;  --------------> c  = 1; 即3 * 5 * 1 = 15;

为什么要使余数为1:是为了要求余数2的话,只要乘以2就可以,要求余数为3的话,只要乘以3就可以!

( 因为题目想要n % 3 =2, n % 5 =3, n % 7 =2; )

    那么:要使得n % 3 = 2,那么( 5 * 7 * 2 )*2  % 3 = 2;( 因为5 * 7 * 2 % 3 = 1 )

    同理: 要使得n % 5 = 3,那么( 3 * 7 * 1 )*3  % 5 = 3;( 因为3 * 7 * 1 % 5 = 1 )

    同理:要使得n % 7 = 2,那么( 3 * 5 * 1 )* 2  % 7 = 2;( 因为3 * 5 * 1 % 7 = 1 )

那么现在将( 5 * 7 * 2 )* 2和( 3 * 7 * 1 )* 3和( 3 * 5 * 1 )* 2相加会怎么样呢?我们知道

   ( 5 * 7 * 2 )* 2可以被5和7整除,但是%3等于2

   ( 3 * 7 * 1 )* 3可以被3和7整除,但是%5等于3

   ( 3 * 5 * 1 )* 2可以被3和5整除,但是%7等于2

那么即使相加后,%3, 5, 7的情况也还是一样的!

    那么就得到一个我们暂时需要的数( 5 * 7 * 2 )* 2 +( 3 * 7 * 1 )* 3 +( 3 * 5 * 1 )* 2 = 233

但不是最小的!所有我们还要 233 % ( 3 * 5 * 7 ) == 23  得解!

【poj 1006】Biorhythms(数论--中国剩余定理 模版题){附【转】中国剩余定理 }