POJ 2891 Strange Way to Express Integers 中国剩余定理解法
来源:互联网 发布:编程有多难 编辑:程序博客网 时间:2024/05/22 22:54
一种不断迭代,求新的求余方程的方法运用中国剩余定理。
总的来说,如果对方程操作,和这个定理的数学思想运用的不多的话,是很困难的。
参照了这个博客的程序写的: http://scturtle.is-programmer.com/posts/19363.html
这个博客举例说的挺好的:http://blog.csdn.net/mishifangxiangdefeng/article/details/7109217
hdu 3579 Hello Kiki 中国剩余定理(不互质的情况)
对互质的情况,处理起来比较方便,可以直接套模板
本题给出不互质的模线性方程组,求出满足方程的最小正整数解
方案:对于不互质的模线性方程组,可以进行方程组合并,求出合并后的方程的解,这样就可以很快地推出方程的最终解。
两个方程合并的一种方法:
x = c1 (mod b1)
x = c2(mod b2)
此时b1,b2不必互质的。
显然可以得到x = k1 * b1 + c1 x = k2* b2 + c2,
两个方程合并一下就可以得到:k1 * b1 = c2 - c1 (mod b2),
这样可以设g=gcd(b1,b2),于是就有b1/g*k1-b2/g*k2=(c2-c1)/g,
显然判断(c2-c1)/g是否为整数就能判断是否存在解,
这样在经过类似的变换就能得到k1 = K (mod (b2/g)),
最后得到x = K*b1 + c1 (mod (b1 * b2/g))。
对于题目所给正整数的要求,只有一种反例,就是结果输出为0的情况,
这个可以特殊考虑,只需要考虑所有数的最小公倍数即可。
各个式子各个变量的含义都需要理解才能写好这个程序;最后0MS过,这个程序居然上榜了。
__int64 s, t, g;void extGCD(__int64 a, __int64 b){if (b == 0){s = 1, t = 0, g = a;}else{extGCD(b, a % b);__int64 tmp = s;s = t;t = tmp - a / b * t;}}int main(){__int64 m1, m2, r1, r2, m10, m20, c;int n;while (scanf("%d", &n) != EOF){bool flag = false;scanf("%lld %lld", &m1, &r1);for (int i = 1; i < n; i++){scanf("%lld %lld", &m2, &r2);if (flag) continue;extGCD(m1, m2);//因为定理条件是除数互质,所以除以公约数使得其互质c = r2 - r1;//k1*m1 == (r2 - r1) (mod m2)if (c % g){flag = true;continue;}m20 = m2 / g;//这个为新的mod除数,和下面新的m1互质c /= g;__int64 r0 = (c * s % m20 + m20) % m20;r1 = r0 * m1 + r1;m1 = m1 * m20;//得到新式子的系数: m1 * x + r1 == r2 即:x = r1, r2...(mod m1, m2)}if (flag) puts("-1");else printf("%lld\n", r1);}return 0;}
- poj 2891 Strange Way to Express Integers 中国剩余定理
- 中国剩余定理 poj 2891 Strange Way to Express Integers
- POJ 2891 Strange Way to Express Integers 中国剩余定理
- poj Strange Way to Express Integers 2891 (中国剩余定理)
- POJ 2891-Strange Way to Express Integers【中国剩余定理】
- POJ 2891 Strange Way to Express Integers (中国剩余定理)
- POJ 2891 Strange Way to Express Integers(中国剩余定理)
- poj 2891 Strange Way to Express Integers(中国剩余定理)
- POJ 2891 Strange Way to Express Integers 中国剩余定理解法
- POJ-2981 Strange Way to Express Integers(中国剩余定理)
- POJ 2891 Strange Way to Express Integers 非互质的中国剩余定理
- poj 2891 Strange Way to Express Integers 模数不互素的中国剩余定理
- poj 2891 Strange Way to Express Integers(扩展欧几里得,中国剩余定理)
- poj-2891(Strange Way to Express Integers)--中国剩余定理&&扩展欧几里得
- POJ 2891 Strange Way to Express Integers 解题报告(中国剩余定理)
- poj 2891 Strange Way to Express Integers(中国剩余定理)
- POJ 2891 Strange Way to Express Integers (中国剩余定理)
- POJ 2891 Strange Way to Express Integers(中国剩余定理扩展)
- 网页如何实现平均分成左右两部分
- 使用GUI反编译需要手动修改的地方
- 排序(一)
- Putty之public key ssh认证入门
- Socket同时使用ObjectInputStream和ObjectOutputStream传输序列化对象时的顺序
- POJ 2891 Strange Way to Express Integers 中国剩余定理解法
- 巧夺天工的kfifo
- 第二次实验-----算法基本功与综合思考
- 通过eclipse的egit插件提交提示Auth fail
- JVM学习笔记
- Visual Studio 拖动Combobox控件未响应
- Linux设备驱动剖析之SPI(四)
- 二分查找
- js 处理时间,应对微信平台 7天 15 天 30天