[poj2891]Strange Way to Express Integers(扩展中国剩余定理)
题意:求解一般模线性同余方程组
解题关键:扩展中国剩余定理求解。两两求解。
$\left\{ {\begin{array}{*{20}{l}}
{x = {r_1}\,\bmod \,{m_1}}\\
{x = {r_2}\,\bmod \,{m_2}}
\end{array}} \right.$
为了代码的符号清晰,将转化后的系数都为正,故如下设方程。
$\left\{ {\begin{array}{*{20}{l}}
{x = {r_1} - {k_1}{m_1}}\\
{x = {r_2} + {k_2}{m_2}}
\end{array}} \right.$
${r_1} - {r_2} = {k_2}{m_2} + {k_1}{m_1}$
以上其实是另一个模线性同余方程组。
考虑$ax + by = c$
由模线性同余方程的存在定理:$\gcd (a,b)|c$
$\begin{array}{l}
\frac{a}{{\gcd (a,b)}}x + \frac{b}{{\gcd (a,b)}} = \frac{c}{{\gcd (a,b)}}\\
x \equiv {(\frac{a}{{\gcd (a,b)}})^{ - 1}}\frac{c}{{\gcd (a,b)}}\bmod (\frac{b}{{\gcd (a,b)}})
\end{array}$
回归原式:
$x$即为${k_1}$
推出原式中的$x$
$x = {r_1} - {k_1}{m_1} = {r_1} - {m_1}{(\frac{{{m_1}}}{{\gcd ({m_1},{m_2})}})^{ - 1}}\frac{{{r_2} - {r_1}}}{{\gcd ({m_1},{m_2})}}\bmod \frac{{{m_1}{m_2}}}{{\gcd ({m_1},{m_2})}}$
一般化这个结论,模数即为lcm,可直接记住
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<iostream>
using namespace std;
typedef long long ll;
ll x,y,r[],m[],n;
ll extgcd(ll a,ll b,ll &x,ll &y){
ll d=a;
if(b) d=extgcd(b,a%b,y,x),y-=a/b*x;
else x=,y=;
return d;
}
ll excrt(int n,ll *m,ll *r){
ll M=m[],pre=r[],d;//a是模数
for(int i=;i<n;i++){
d=extgcd(M,m[i],x,y);
if((pre-r[i])%d!=) return -;
x=(pre-r[i])/d*x%m[i];
pre-=x*M;
M=M/d*m[i];//lcm
pre%=M;
}
return (pre%M+M)%M;
}
int main(){
ios::sync_with_stdio();
while(cin>>n){
for(int i=;i<n;i++) cin>>m[i]>>r[i];
ll ans=excrt(n,m,r);
printf("%lld\n",ans);
}
}
[poj2891]Strange Way to Express Integers(扩展中国剩余定理)的更多相关文章
- POJ - 2891 Strange Way to Express Integers (扩展中国剩余定理)
题目链接 扩展CRT模板题,原理及证明见传送门(引用) #include<cstdio> #include<algorithm> using namespace std; ty ...
- Strange Way to Express Integers(中国剩余定理+不互质)
Strange Way to Express Integers Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%I64d & ...
- POJ2891 Strange Way to Express Integers (扩展欧几里德)
本文为博主原创文章,欢迎转载,请注明出处 www.cnblogs.com/yangyaojia 题目大意 求解一组同余方程 x ≡ r1 (mod a1) x ≡ r2 (mod a2) x ≡ r ...
- poj 2891 Strange Way to Express Integers(中国剩余定理)
http://poj.org/problem?id=2891 题意:求解一个数x使得 x%8 = 7,x%11 = 9; 若x存在,输出最小整数解.否则输出-1: ps: 思路:这不是简单的中国剩余定 ...
- POJ2891 Strange Way to Express Integers 扩展欧几里德 中国剩余定理
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - POJ2891 题意概括 给出k个同余方程组:x mod ai = ri.求x的最小正值.如果不存在这样的x, ...
- 中国剩余定理+扩展中国剩余定理 讲解+例题(HDU1370 Biorhythms + POJ2891 Strange Way to Express Integers)
0.引子 每一个讲中国剩余定理的人,都会从孙子的一道例题讲起 有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二.问物几何? 1.中国剩余定理 引子里的例题实际上是求一个最小的x满足 关键是,其中 ...
- P4777 【模板】扩展中国剩余定理(EXCRT)/ poj2891 Strange Way to Express Integers
P4777 [模板]扩展中国剩余定理(EXCRT) excrt模板 我们知道,crt无法处理模数不两两互质的情况 然鹅excrt可以 设当前解到第 i 个方程 设$M=\prod_{j=1}^{i-1 ...
- POJ2891——Strange Way to Express Integers(模线性方程组)
Strange Way to Express Integers DescriptionElina is reading a book written by Rujia Liu, which intro ...
- POJ2891 Strange Way to Express Integers
题意 Language:Default Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 131072K Total S ...
随机推荐
- python 基础 2.7 range与xrange的区别
#/usr/bin/python #coding=utf-8 #@Time :2017/10/25 19:22 #@Auther :liuzhenchuan #@File :range与xrange的 ...
- Selenium 我的自动化测试历程 (Selenium+TestNG+Java+ReportNG+Jenkins)
测试环境:Java+Selenium+TestNG,Jenkins持续集成. 测试代码 代码结构 采用页面对象模型(Page Object),减少UI修改后,对代码的影响. Java编写,采用Te ...
- 基于 HTTP 协议的几种实时数据获取技术(转)
HTTP协议 HTTP协议大家都很熟悉了,开始本文之前,首先简单回顾一下HTTP协议. HTTP协议是建立在TCP协议上的应用层协议,协议的本质是请求----应答: 即对于HTTP协议来说,服务端给一 ...
- NFT是什么,有什么前景?
去年 11 月,Crypokitties 的发布给加密货币的世界带来了风暴,有些加密猫的价格甚至涨到了 30 万美元,以太坊网络拥堵不堪,平均贡献了当时以太坊网络30%的交易额.当 Cryptokit ...
- Redis——慢查询分析
核心知识点: 1.什么是慢查询? 2.客户端执行一条命令的步骤? 3.阈值和慢查询日志的设置? 4.慢查询日志的操作命令:slowlog get.slowlog len.slowlog reset. ...
- python环境的caffe配置
基本按照这个教程来 http://blog.csdn.net/zb1165048017/article/details/52980102 步骤 安装Anaconda2,去官网上下载,注意下载对应自己p ...
- NPM 与 Nodejs
安装了Nodejs之后,NPM也安装好了 如何知道当前是否已经安装Nodejs和NPM了呢? node -v //查看当前nodejs的版本 npm -v //查看当前npm的版本 NPM 初始化 n ...
- Too many open files解决方案及原理
以下是我解决Too many open files异常时学习的知识的理解和总结,如有不正确指出,敬请指出! 此问题中文搜索雷同,你可以尝试以下关键字:"file descriptor lea ...
- smokeping 报警配置
摘自: http://blog.csdn.net/achejq/article/details/51556494 smokeping 默认用sendmail 发邮件告警,也可以直接调用外部程序进行报警 ...
- Mybatis-Generator_学习_02_使用Mapper专用的MyBatis Generator插件
源码见:https://github.com/shirayner/tk-mybatis-generator 一.要点 二.具体实现 1.项目结构 2.配置 pm.xml <?xml versio ...