POJ 2891 Strange Way to Express Integers 中国剩余定理解法
一种不断迭代,求新的求余方程的方法运用中国剩余定理。
总的来说,假设对方程操作。和这个定理的数学思想运用的不多的话。是非常困难的。
參照了这个博客的程序写的: 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 中国剩余定理 数论 exgcd
http://poj.org/problem?id=2891 题意就是孙子算经里那个定理的基础描述不过换了数字和约束条件的个数…… https://blog.csdn.net/HownoneHe/ar ...
- POJ 2891 Strange Way to Express Integers(中国剩余定理)
题目链接 虽然我不懂... #include <cstdio> #include <cstring> #include <map> #include <cma ...
- poj 2981 Strange Way to Express Integers (中国剩余定理不互质)
http://poj.org/problem?id=2891 Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 13 ...
- poj 2891 Strange Way to Express Integers (非互质的中国剩余定理)
Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 9472 ...
- poj——2891 Strange Way to Express Integers
Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 16839 ...
- [POJ 2891] Strange Way to Express Integers
Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 10907 ...
- poj 2891 Strange Way to Express Integers(中国剩余定理)
http://poj.org/problem?id=2891 题意:求解一个数x使得 x%8 = 7,x%11 = 9; 若x存在,输出最小整数解.否则输出-1: ps: 思路:这不是简单的中国剩余定 ...
- [poj 2891] Strange Way to Express Integers 解题报告(excrt扩展中国剩余定理)
题目链接:http://poj.org/problem?id=2891 题目大意: 求解同余方程组,不保证模数互质 题解: 扩展中国剩余定理板子题 #include<algorithm> ...
- poj 2891 Strange Way to Express Integers【扩展中国剩余定理】
扩展中国剩余定理板子 #include<iostream> #include<cstdio> using namespace std; const int N=100005; ...
随机推荐
- Wannafly挑战赛19 A-队列Q
题目描述 ZZT 创造了一个队列 Q.这个队列包含了 N 个元素,队列中的第 i 个元素用 Qi 表示.Q1 表示队头元素,QN 表示队尾元素.队列中的元素是 N 的一个全排列. ZZT 需要在这个队 ...
- xcode常用的快捷键
按键 描述 command+[ 左移代码块 command+] 右移代码块 Tab键 接受代码自动完成提示 Esc键 显示代码提示菜单 command+方向left键 移动光标到本行行首 comman ...
- 关于用友 U8-UAP二开的一些事
这是关于一个刚刚接触用友U8的二次开发的一些小心得. 首先就是用友二开的论坛,http://u8dev.yonyou.com/ 当然这个论坛做得不怎么样,提出了好几个问题,都没有回复的. 以下是关于二 ...
- .net 大数据量,查找Where优化(List的Contains与Dictionary的ContainsKey的比较)
最近优化一个where查询条件,查询时间很慢,改为用Dictionary就很快了. 一.样例 假设:listPicsTemp 有100w条数据,pictures有1000w条数据. 使用第1段代码执 ...
- 如何在Linuxt系统下运行maven项目
如何在Linuxt系统下运行maven项目 我们知道现在利用MAVEN来管理JAVA项目是非常常见的.比如公司一般都有一个自己的MAVEN仓库,通过MAVEN仓库来解决我们的项目依赖,更加方便的构建项 ...
- 第一个真正意义的jsp程序,连接msql数据库
1. mysql数据库 :在百度上下一个安装包mysql-5.7.17.msi,只装服务即可,选择开发使用 2.建库,建表 mysql> create table testdb; 导入相关建表 ...
- 06--Qt窗口布局
Qt窗口布局 标签: qtlayout 2012-05-05 07:56 3076人阅读 评论(0) 收藏 举报 分类: Qt开发(33) 版权声明:本文为博主原创文章,未经博主允许不得转载. 布 ...
- mysql_数据查询_连接查询
连接查询 1.连接(join) 也称θ连接,从两个关系的笛卡尔积中选择属性间满足一定条件的元组. 等值连接:θ为“=”的连接运算称为等值连接.从关系R和S的广义笛卡尔积中选取A.B属性值相等的元组. ...
- Cesium学习笔记(四)Camera ----http://blog.csdn.net/hobhunter/article/details/74909641
Cesium 相机控制场景中的视野.操作相机的方法有很多,如旋转,缩放,平移和飞到目的地.Cesium具有默认的鼠标和触摸事件处理程序与相机进行交互,还有一个API以编程方式操纵相机. 我们可以使用该 ...
- 用C#在Visual Studio写Javascript单元测试(Firefox内核)
引用nuget包: 注意:Geckofx45 nuget包必须是最后引用,否则初始化会出错 编写JsRunner using Gecko; using System; using System.Col ...