我国有一本数学古书「孙子算经」有这样一道问题:「今有物,不知其数,三三数之,剩二;五五数之,剩三;七七数之,剩二。问物几何?」
此题的意思是:有一批物品,三个三个地数,剩两个;五个五个地数,剩三个;七个七个地数,剩两个。问这批物品至少有多少个? 术曰:「三三数之剩二,置一百四十,五五数之剩三,置六十三,七七数之剩二,置三十,并之,得二百三十三,以二百一十减之,即得。凡三三数之剩一,则置七十,五五数之剩一,则置二十一,七七数之剩一,则置十五,即得。」 这是解答。意思是2×70+3×21+2×15=233,233-105-105=23. 后面是法则, 明代数学家程大位在其<算法统宗>里用口诀“:三人同行七十稀,五树梅花廿一,七子团圆月正半,除百零五便得知.”表达的。 这个口诀的意思是:把用3除所得的余数乘以70,加上用5除所得的余数乘以21,再加上用7除所得的余数乘以15,结果若是比105大,就减去105的倍数,便得所求的数。 这就是被称之为“中国剩余定理”。 中国剩余定理 设m1,m2,...,mk两两互质,则下面的同余方程组: x = a1 (mod m1) x = ak (mod mk) . . . x = ak (mod mk) 在0<=x<M = m1*m2*...*mk内有唯一解。 记Mi = M / mi (1<=i<=k) ,因为(Mi,mi)=1,故有两整数pi,qi满足Mi*pi + mi*qi = 1, 如果记ei = Mi*pi ,那么有 ei = 0 (mod mj) , j<>i = 1 (mod mj) , j==i 很显然,e1*a1 + e2*a2 + ... + ek*ak 就时方程组的一个解 , 这个解%M后就得到了最小的非负整数解 求ei 我们就可以用扩展的欧几里得算法做。。。。 下面贴一个中国剩余定理的模板吧 C/C++代码:
|
中国剩余定理(孙子定理)
最新推荐文章于 2025-01-24 00:15:00 发布