POJ 1006 中国剩余定理
2013-09-14 19:57
239 查看
这里写的是我(一个超级菜逼)的理解
题意就是这样
( num + d ) % 23 == p;
( num + d ) % 28 == e;
( num + d ) % 33 == i;
其中d, p, e, i都是已知的
23, 28, 33都是互质的数
后面的这是重点
33 * 28 * a % 23 = 1 => a = 6; 33 * 28 * a = 5544;
23 * 33 * b % 28 = 1 => b = 19; 23 * 33 * b = 14421;
23 * 28 * c % 33 = 1 => c = 2; 23 * 28 * c = 1288;
得 num + d = 5544 * p + 14421 * e + 1288 * i;
为什么要余1?为什么最后num + d能这么表达?
我们把num + d先代入( num + d ) % 23 = p中
可以看到后面的两个14421 * e + 1288 * i都被消去(因为都有个因数是23)
而5544mod23 = 1,故(num + d) % 23 = p;
其他的两个同理
固有如下代码
题意就是这样
( num + d ) % 23 == p;
( num + d ) % 28 == e;
( num + d ) % 33 == i;
其中d, p, e, i都是已知的
23, 28, 33都是互质的数
后面的这是重点
33 * 28 * a % 23 = 1 => a = 6; 33 * 28 * a = 5544;
23 * 33 * b % 28 = 1 => b = 19; 23 * 33 * b = 14421;
23 * 28 * c % 33 = 1 => c = 2; 23 * 28 * c = 1288;
得 num + d = 5544 * p + 14421 * e + 1288 * i;
为什么要余1?为什么最后num + d能这么表达?
我们把num + d先代入( num + d ) % 23 = p中
可以看到后面的两个14421 * e + 1288 * i都被消去(因为都有个因数是23)
而5544mod23 = 1,故(num + d) % 23 = p;
其他的两个同理
固有如下代码
#include <cstdio> #define MOD 21252 int p, e, i, d; int main() { int it = 0; while(scanf("%d%d%d%d", &p, &e, &i, &d) != EOF) { if(p == -1 && e == -1 && i == -1 && d == -1) break; int ans = (5544 * p + 14421 * e + 1288 * i - d + MOD) % MOD; if(ans <= 0) ans += MOD; printf("Case %d: the next triple peak occurs in %d days.\n", ++it, ans); } }
相关文章推荐
- poj 1006中国剩余定理(模板题)
- poj 1006中国剩余定理模板
- poj-1006 中国剩余定理
- POJ 1006 Biorhythms | 中国剩余定理
- poj 1006 生理周期 中国剩余定理
- poj 1006 中国剩余定理模板
- poj 1006 Biorhythms 中国剩余定理
- POJ 1006 Biorhythms(中国剩余定理 模板)
- poj 1006-中国剩余定理
- poj 1006:Biorhythms(水题,经典题,中国剩余定理)
- Poj 1006 中国剩余定理
- POJ 1006 中国剩余定理(孙子定理) ——数论
- POJ 1006 Biorhythms 中国剩余定理/扩展欧几里得
- poj 1006 中国剩余定理模板
- poj 1006 中国剩余定理
- poj 1006 Biorhythms 中国剩余定理
- POJ1006: 中国剩余定理的完美演绎
- POJ 1006---Biorhythms【中国剩余定理】
- POJ 1006: 中国剩余定理
- POJ1006 中国剩余定理