实用算法实现-第 27 篇 中国余数定理
2012-01-24 21:49
435 查看
27.1 中国余数定理
定理:对任意n > 1,如果gcd(a, n) = 1,则方程a • x ≡ 1(mod n)对模n有唯一解,否则方程无解。若方程有解,x可以表示为(a^-1) mod n,x可以由欧几里德算法的扩广形式求出。设n1, n2, ..., nk两两互质,n = n1• n2 • ... • nk
定义:mi = n1• n2 • ... • ni-1 • ni+1 • ... • nk
定义:ci = mi • (mi^-1 mod ni)
定义:a ≡ (a1•c1 + a2• c2 + ...+ak•ck) (mod n)
可以证明:a ≡ ai (mod ni)
证明如下:
ci = mi • (mi^-1 mod ni) 故此ci ≡ 1 (mod ni)
又由mi ≡ 0 (mod nj) j= 1, 2, ..., i-1, i+1, ...k
故此 mi • (mi^-1 mod ni) ≡ 0 (mod nj) j =1, 2, ..., i-1, i+1, ...k
故此ci ≡ 0 (mod nj) j = 1, 2, ...,i-1, i+1, ...k
由 ci ≡ 0 (mod nj) j = 1, 2, ..., i-1, i+1, ...k
ci ≡ 1 (mod nj) j = i
可知ci和(0, 0, ..., 0, 1, 0, ..., 0)有一一对应的关系。
故此a ≡ ai • ci (mod ni)
≡ ai • mi(mi^-1 mod ni) (mod ni)
≡ ai (mod ni)
由上面证明可知:对于两两互质的n1, n2, ..., nk,若已知a1, a2, ..., ak,则可以求出a (mod n),使得ai = a (mod ni)。即a和(a1, a2, ..., ak)一一对应。
由中国余数定理有:
推论:如果n1, n2, ..., nk两两互质,n=n1 • n2 • ... • nk,则对所有整数x和a(i = 1, 2, ..., k), 有x = a(mod ni),当且仅当x = a(mod n)。
27.1.1 实例
PKU JudgeOnline, 1006, Biorhythms.27.1.2 问题描述
一个人体力、情绪、智力的波动周期为23,28,33天,给定每种状态达到最高点分别为第p, e, i天,从第d天开始,过多少天后会达到三者的最高点。27.1.3 输入
00 0 000 0 100
520 34 325
45 6 7
283102 23 320
203301 203 40
-1 -1 -1 -1
27.1.4 输出
Case1: the next triple peak occurs in 21252 days.Case2: the next triple peak occurs in 21152 days.
Case3: the next triple peak occurs in 19575 days.
Case4: the next triple peak occurs in 16994 days.
Case5: the next triple peak occurs in 8910 days.
Case6: the next triple peak occurs in 10789 days.
27.1.5 分析
这里23,28,33互质,所以可以用中国剩余定理的这个推论。先求出mi,再根据欧几里德算法的扩广形式求出((mi^-1) mod ni),再求出ci。将ci作为常数存起来,然后根据公式求出a就可以了。
27.1.6 程序
#include<stdio.h> int main() { intp,e,i,d,a,t=0; while(1) { scanf("%d%d%d%d",&p,&e,&i,&d); if(p==-1&& e==-1 && i==-1 && d==-1) break; a=(5544*p+14421*e+1288*i-d+21252)%21252; if(!a) a=21252; printf("Case%d: the next triple peak occurs in %d days.\n",++t,a); } return 0; }
27.2 实例
PKU JudgeOnline, 1006, Biorhythms.
本文章欢迎转载,请保留原始博客链接http://blog.csdn.net/fsdev/article
相关文章推荐
- 实用算法实现-第 27 篇 中国余数定理
- Python实现的中国剩余定理算法示例
- 中国剩余定理算法详解(余数互质和不互质)
- 算法:Python实现中国剩余定理
- 中国剩余定理算法详解(余数互质和不互质)
- 实用算法实现-第8篇 后缀树和后缀数组 [1简介]
- 实用算法实现-第 8 篇 后缀树和后缀数组 [4 最长回文子串]
- 【codevs3990】中国余数定理2 中国剩余定理
- 中国象棋程序的设计与实现(十二)--棋盘绘制算法(尽管注释非常详细,完全理解仍有难度)
- 实用算法实现-第 18 欧拉回路
- 实用算法实现-第 21 篇 每对顶点间的最短路径
- code vs 3990 中国余数定理 2 (中国剩余定理)
- 算法总结之欧拉函数&中国剩余定理
- 实用算法实现-第 24 篇 高精度整数运算
- 算法模板之中国剩余定理
- 中国剩余定理的实现《二》大整数
- 实用算法实现-第 28 篇 素数判别
- 实用算法实现-第8篇 后缀树和后缀数组 [1简介]
- 实用算法实现-第 8 篇 后缀树和后缀数组 [4 最长回文子串]
- Codevs 3990 中国余数定理 2