一种不断迭代,求新的求余方程的方法运用中国剩余定理。

总的来说,假设对方程操作。和这个定理的数学思想运用的不多的话。是非常困难的。

參照了这个博客的程序写的: 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 中国剩余定理解法的更多相关文章

  1. POJ 2891 Strange Way to Express Integers 中国剩余定理 数论 exgcd

    http://poj.org/problem?id=2891 题意就是孙子算经里那个定理的基础描述不过换了数字和约束条件的个数…… https://blog.csdn.net/HownoneHe/ar ...

  2. POJ 2891 Strange Way to Express Integers(中国剩余定理)

    题目链接 虽然我不懂... #include <cstdio> #include <cstring> #include <map> #include <cma ...

  3. poj 2981 Strange Way to Express Integers (中国剩余定理不互质)

    http://poj.org/problem?id=2891 Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 13 ...

  4. poj 2891 Strange Way to Express Integers (非互质的中国剩余定理)

    Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 9472   ...

  5. poj——2891 Strange Way to Express Integers

    Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 16839 ...

  6. [POJ 2891] Strange Way to Express Integers

    Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 10907 ...

  7. poj 2891 Strange Way to Express Integers(中国剩余定理)

    http://poj.org/problem?id=2891 题意:求解一个数x使得 x%8 = 7,x%11 = 9; 若x存在,输出最小整数解.否则输出-1: ps: 思路:这不是简单的中国剩余定 ...

  8. [poj 2891] Strange Way to Express Integers 解题报告(excrt扩展中国剩余定理)

    题目链接:http://poj.org/problem?id=2891 题目大意: 求解同余方程组,不保证模数互质 题解: 扩展中国剩余定理板子题 #include<algorithm> ...

  9. poj 2891 Strange Way to Express Integers【扩展中国剩余定理】

    扩展中国剩余定理板子 #include<iostream> #include<cstdio> using namespace std; const int N=100005; ...

随机推荐

  1. flask web 表单验证 WTForms

    简介 WTForms 是一个flask集成框架,或者说是库,用于处理浏览器表单提交的数据,它在flask-WTF的基础上扩展并添加了一些随手可得的精巧帮助函数,这些函数将会是在flask里使用表单更加 ...

  2. 传值:web.xml传递参数 即在Servlet中获取web.xml里的值

    传值:web.xml传递参数 在web.xml中的Servlet里配置多个init-param <servlet> ... <init-param> <param-nam ...

  3. EF在应用程序配置文件中找不到名为“XXX”的连接字符串。

    现象: 在配置EF的时候需要如题所述的问题,仔细检查了在EF实体模型对应程序集下的APP.Config文件中的ConnectionString配置项有了XXX项的数据库字符串的配置: <conn ...

  4. 批量建文件夹【win7企业版】

    在记事本中notepad.exe按如下格式编辑好 md + 空格 + 文件夹名字(多个之间用空格隔开) 保存为.bat格式,运行即可批量创建文件夹.

  5. 研磨JavaScript系列(五):奇妙的对象

    在JavaScript中,只有object和function两种东西有对象化的能力.我们先来说说函数的对象化能力. 任何一个函数都可以为其动态地添加或去除属性,这些属性可以是简单类型,可以是对象,也可 ...

  6. js技巧(一)

    1.文档入口函数 window.onload = function () { //code 将会在页面的全部代码执行完成之后再去执行. } 2.弹窗   alert()   警告窗   confirm ...

  7. Python语言之数据结构1(序列--列表,元组,字符串)

    0.序列 列表,元组,字符串都是序列. 序列有两个特点:索引操作符和切片操作符.索引操作符让我们可以从序列中抓取一个特定项目.切片操作符让我们能够获取序列的一个切片,即一部分序列. 以字符串为例: 1 ...

  8. Centos6.4 安装fail2ban防暴力破解

    Centos6.4 安装fail2ban防暴力破解 一. 安装 curl -O https://codeload.github.com/fail2ban/fail2ban/tar.gz/0.9.0 m ...

  9. CAD把一个命令当着一个函数调用,不执行(com接口VB语言)

    主要用到函数说明: MxDrawXCustomFunction::Mx_SendStringToExecuteFun 把一个命令当着一个函数调用,不执行,详细说明如下: 参数 说明 CString s ...

  10. es6-let/var/const

    const和var区别 for(let i=0;i<3;i++) { console.log(i); } console.log(i); for(var i=0;i<3;i++) { co ...